两个人都可以是发送方,也都可以是接收方!
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打开老师端: