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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

javaUDP逐步实现多线程发送和接收消息

發布時間:2023/12/9 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 javaUDP逐步实现多线程发送和接收消息 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

        • 一、UDP實現發送消息
        • 二、UDP實現聊天
        • 三、UDP多線程在線聊天

一、UDP實現發送消息

  • 發送端

    //不需要連接服務器 public class UdpClientDemo1 {public static void main(String[] args) throws Exception{//1.建立一個SocketDatagramSocket socket = new DatagramSocket();//2.建個包String msg = "你好啊,服務器!";InetAddress localhost = InetAddress.getByName("localhost");int port = 9000;//數據,數據的長度起始,要發送給誰DatagramPacket packet = new DatagramPacket(msg.getBytes(), 0, msg.getBytes().length, localhost, port);//3.發送包socket.send(packet);//4.關閉流socket.close();} }
  • 接收端

    public class UdpServerDemo1 {public static void main(String[] args) throws Exception {//開發端口DatagramSocket socket = new DatagramSocket(9000);//接收數據包byte[] buffer = new byte[1024];DatagramPacket packet = new DatagramPacket(buffer, 0, buffer.length);//接收socket.receive(packet);System.out.println(packet.getAddress().getHostAddress());System.out.println(new String(packet.getData(),0,packet.getLength()));//關閉連接socket.close();} }
  • 二、UDP實現聊天

  • 循環發送消息

    public class UdpSenderDemo1 {public static void main(String[] args) throws Exception {DatagramSocket socket = new DatagramSocket(8888);//準備數據:控制臺讀取System.inBufferedReader reader = new BufferedReader(new InputStreamReader(System.in));while(true) {String data = reader.readLine();byte[] datas = data.getBytes();DatagramPacket packet = new DatagramPacket(datas, 0, datas.length, new InetSocketAddress("localhost", 6666));socket.send(packet);if(data.equals("bye")){break;}}socket.close();} }
  • 循環接收消息

    public class UdpReceiveDemo1 {public static void main(String[] args) throws Exception {DatagramSocket socket = new DatagramSocket(6666);while(true) {//準備接收包裹byte[] container = new byte[1024];DatagramPacket packet = new DatagramPacket(container, 0, container.length);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();} }
  • 三、UDP多線程在線聊天

  • 在線聊天:兩人都可以是發送方,也都可以是接收方

  • 發送端

    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;try {socket = new DatagramSocket(fromPort);reader = new BufferedReader(new InputStreamReader(System.in));} catch (Exception e) {e.printStackTrace();}}@Overridepublic void run() {//準備數據:控制臺讀取System.inwhile(true) {try {String data = reader.readLine();byte[] datas = data.getBytes();DatagramPacket packet = new DatagramPacket(datas, 0, datas.length, new InetSocketAddress(this.toIP, this.toPort));socket.send(packet);if(data.equals("bye")){break;}} catch (IOException e) {e.printStackTrace();}}socket.close();} }
  • 接收端

    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;try {socket = new DatagramSocket(port);} catch (SocketException e) {e.printStackTrace();}}@Overridepublic void run() {while(true) {try {//準備接收包裹byte[] container = new byte[1024];DatagramPacket packet = new DatagramPacket(container, 0, container.length);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 TalkStudent {public static void main(String[] args) {//開啟兩個線程:發送和接收new Thread(new TalkSend(7777,"localhost",9999)).start();new Thread(new TalkReceive(8888,"老師")).start();} }
  • 老師端測試

    public class TalkTeacher {public static void main(String[] args) {new Thread(new TalkSend(5555,"localhost",8888)).start();new Thread(new TalkReceive(9999,"學生")).start();} }
  • 測試結果

  • 總結

    以上是生活随笔為你收集整理的javaUDP逐步实现多线程发送和接收消息的全部內容,希望文章能夠幫你解決所遇到的問題。

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