两个人都可以是发送方,也都可以是接收方
TalkSend
public class TalkSend implements Runnable { DatagramSocket socket = null; BufferedReader reader = null; private int fromPort;//自己的ip private String toIP;//对方的ip private int toPort; public TalkSend(int fromIP, 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 (SocketException e) { e.printStackTrace(); } } @Override public void run() { while (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 (Exception e) { socket.close(); } } } }
TalkReceive
public class TalkReceive implements Runnable{ DatagramSocket socket = null; private int port;//自己的端口号 private String magFrom;//消息从哪来 public TalkReceive(int port,String magFrom) { this.port= port; this.magFrom = magFrom; try { socket = new DatagramSocket(port); } catch (SocketException e) { e.printStackTrace(); } } @Override public 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(magFrom+":"+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();//从什么地方发出去,发给谁“localhost”发到9999,这个端口 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(); } }