日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

(网络编程)UDP实现聊天

發布時間:2025/3/20 编程问答 13 豆豆
生活随笔 收集整理的這篇文章主要介紹了 (网络编程)UDP实现聊天 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • UDP實現聊天
    • 單線程發送接收數據
      • 發送方代碼
      • 接收方代碼
    • 多線程實現雙方互相發送數據
      • 首先編寫發送和接收的Runnable實現類
      • 雙方線程創建啟動

UDP實現聊天

我們知道UDP無需建立連接就可發送信息,就像QQ一樣,無論對方是否在線,你都可以發送消息。下面用UDP來實現聊天功能。

單線程發送接收數據

發送方發送數據

接收方接收數據

發送方代碼

import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetSocketAddress; import java.net.SocketException;public class Demo01Sender {public static void main(String[] args) throws Exception {//1.建立一個socket,參數是自己的端口號DatagramSocket socket = new DatagramSocket(8888);//準備數據,控制臺讀取輸入BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));while (true) {String data = reader.readLine();byte[] datas = data.getBytes();//2.創建數據包//參數:數據,數據開始點,數據長度,發送的地址DatagramPacket packet = new DatagramPacket(datas, 0, datas.length, new InetSocketAddress("localhost", 6666));//3.發送數據包socket.send(packet);if (data.equals("bye")){break;}}socket.close();} }

接收方代碼

import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.SocketException;public class Demo01Receiver {public static void main(String[] args) throws Exception {//1.創建socketDatagramSocket socket = new DatagramSocket(6666);while (true) {//2.準備接收包裹byte[] container = new byte[1024];DatagramPacket packet = new DatagramPacket(container, 0, container.length);//3.阻塞式接受包裹socket.receive(packet);//顯示接受數據byte[] data = packet.getData();String receiveData = new String(data, 0, data.length);System.out.println(receiveData);if (receiveData.equals("bye")){break;}}socket.close();}}

多線程實現雙方互相發送數據

上述代碼只能實現單方發送與接收,而要實現雙方互相發送數據和接收數據則要用到多線程。
佐伊

伊澤瑞爾

首先編寫發送和接收的Runnable實現類

發送

import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetSocketAddress; import java.net.SocketException;public class TalkSend implements Runnable{DatagramSocket socket = null;BufferedReader reader = null;private int fromPort;private String toIP;private int toPort;public TalkSend(int fromPort, String toIP, int toPort) {this.fromPort = fromPort;this.toIP = toIP;this.toPort = toPort;}@Overridepublic void run() {//1.建立一個socket,參數是自己的端口號try {socket = new DatagramSocket(fromPort);//準備數據,控制臺讀取輸入reader = new BufferedReader(new InputStreamReader(System.in));} catch (SocketException e) {e.printStackTrace();}while (true) {try {String data = reader.readLine();byte[] datas = data.getBytes();//2.創建數據包//參數:數據,數據開始點,數據長度,發送的地址DatagramPacket packet = new DatagramPacket(datas, 0, datas.length, new InetSocketAddress(toIP, toPort));//3.發送數據包socket.send(packet);if (data.equals("bye")){break;}} catch (IOException e) {e.printStackTrace();}}socket.close();}}

接收

import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.SocketException;public class TalkReceive implements Runnable{DatagramSocket socket=null;private int port;private String msgFrom;public TalkReceive(int port ,String msgFrom) {this.port = port;this.msgFrom = msgFrom;}@Overridepublic void run() {//1.創建sockettry {socket = new DatagramSocket(port);} catch (SocketException e) {e.printStackTrace();}while (true) {try {//2.準備接收包裹byte[] container = new byte[1024];DatagramPacket packet = new DatagramPacket(container, 0, container.length);//3.阻塞式接受包裹socket.receive(packet);//顯示接受數據byte[] data = packet.getData();String receiveData = new String(data, 0, data.length);System.out.println(msgFrom+":"+receiveData);if (receiveData.equals("bye")){break;}} catch (IOException e) {e.printStackTrace();}}socket.close();} }

雙方線程創建啟動

佐伊

public class TalkZoe {public static void main(String[] args) {new Thread(new TalkSend(2222,"localhost",8888)).start();new Thread(new TalkReceive(6666,"伊澤瑞爾")).start();} }

伊澤瑞爾

public class TalkEz {public static void main(String[] args) {new Thread(new TalkSend(3333,"localhost",6666)).start();new Thread(new TalkReceive(8888,"佐伊")).start();} }

總結

以上是生活随笔為你收集整理的(网络编程)UDP实现聊天的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。