11.UDP多线程在线咨询

两个人都可以是发送方,也都可以是接收方!
 1 package com.Inet.chat;
 2 
 3 import java.io.BufferedReader;
 4 import java.io.IOException;
 5 import java.io.InputStreamReader;
 6 import java.net.DatagramPacket;
 7 import java.net.DatagramSocket;
 8 import java.net.InetSocketAddress;
 9 import java.net.SocketException;
10 
11 public class TalkSend implements Runnable {
12     DatagramSocket socket = null;
13     BufferedReader reader = null;
14 
15     private int fromPort;
16     private String toIP;
17     private int toPort;
18 
19     public TalkSend(int fromPort, String toIP, int toPort) {
20         this.fromPort = fromPort;
21         this.toIP = toIP;
22         this.toPort = toPort;
23         try {
24             socket = new DatagramSocket(fromPort);
25             reader = new BufferedReader(new InputStreamReader(System.in));
26         } catch (SocketException e) {
27             e.printStackTrace();
28         }
29 
30     }
31 
32     @Override
33     public void run() {
34         while (true) {
35             String data = null;
36             try {
37                 data = reader.readLine();
38                 byte[] datas = data.getBytes();
39                 DatagramPacket packet = new DatagramPacket(datas, 0, data.length(), new InetSocketAddress(toIP, toPort));
40 
41                 socket.send(packet);
42                 if (data.equals("bye")) {
43                     break;
44                 }
45             } catch (IOException e) {
46                 e.printStackTrace();
47             }
48         }
49         socket.close();
50     }
51 }
 1 package com.Inet.chat;
 2 
 3 import java.io.IOException;
 4 import java.net.DatagramPacket;
 5 import java.net.DatagramSocket;
 6 import java.net.SocketException;
 7 
 8 public class TalkReceive implements Runnable {
 9     DatagramSocket socket = null;
10     private int port;
11     private String msgFrom;
12 
13     public TalkReceive(int port, String msgFrom) {
14         this.port = port;
15         this.msgFrom = msgFrom;
16         try {
17             socket = new DatagramSocket(port);
18         } catch (SocketException e) {
19             e.printStackTrace();
20         }
21     }
22 
23     @Override
24     public void run() {
25         while (true) {
26             try {
27                 //准备接收包裹
28                 byte[] container = new byte[1024];
29                 DatagramPacket packet = new DatagramPacket(container, 0, container.length);
30                 socket.receive(packet);
31 
32                 //断开连接
33                 byte[] data = packet.getData();
34                 String receiveData = new String(data, 0, data.length);
35 
36                 System.out.println(msgFrom + ":" + receiveData);
37 
38                 if (receiveData.equals("bye")) {
39                     break;
40                 }
41             } catch (IOException e) {
42                 e.printStackTrace();
43             }
44         }
45         socket.close();
46     }
47 }
学生:
1 package com.Inet.chat;
2 
3 public class TalkStudent {
4     public static void main(String[] args) {
5         //开启两个线程
6         new Thread(new TalkSend(7777, "localhost", 9999)).start();
7         new Thread(new TalkReceive(8888, "老师")).start();
8     }
9 }
老师:
1 package com.Inet.chat;
2 
3 public class TalkTeacher {
4     public static void main(String[] args) {
5         //开启两个线程
6         new Thread(new TalkSend(5555, "localhost", 8888)).start();
7         new Thread(new TalkReceive(9999, "学生")).start();
8     }
9 }
最后检查一遍:
为了方便测试,在黑窗口打开对应的学生端,IDEA打开老师端:
posted @ 2020-03-30 18:19  断浮  阅读(217)  评论(0编辑  收藏  举报