首先写两个工具类,放到一个文件夹下就可以。
talkSend.java
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//
package com.liner.chat;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
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 {
this.socket = new DatagramSocket(fromPort);
this.reader = new BufferedReader(new InputStreamReader(System.in));
} catch (Exception var5) {
var5.printStackTrace();
}
}
public talkSend() {
}
public void run() {
while(true) {
while(true) {
try {
String data = this.reader.readLine();
byte[] datas = data.getBytes();
DatagramPacket packet = new DatagramPacket(datas, 0, datas.length, new InetSocketAddress(this.toIP, this.toPort));
this.socket.send(packet);
if (!data.equals("bye")) {
continue;
}
} catch (Exception var4) {
var4.printStackTrace();
continue;
}
this.socket.close();
return;
}
}
}
}
talkReceive.java
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//
package com.liner.chat;
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;
try {
this.socket = new DatagramSocket(port);
} catch (SocketException var4) {
var4.printStackTrace();
}
}
public void run() {
while(true) {
while(true) {
try {
byte[] container = new byte[1024];
DatagramPacket packet = new DatagramPacket(container, 0, container.length);
this.socket.receive(packet);
byte[] data = packet.getData();
String receiveData = new String(data, 0, data.length);
System.out.println(this.msgFrom + ":" + receiveData);
if (!receiveData.equals("bye")) {
continue;
}
} catch (IOException var5) {
var5.printStackTrace();
continue;
}
this.socket.close();
return;
}
}
}
}
学生端实现:
talkStudent.java
package com.liner.chat;
public class talkStudent {
public talkStudent() {
}
public static void main(String[] args) {
(new Thread(new talkSend(7777, "localhost", 9999))).start();
(new Thread(new talkReceive(8888, "老师"))).start();
}
}
talkTeacher.java
package com.liner.chat;
public class talkTeacher {
public talkTeacher() {
}
public static void main(String[] args) {
(new Thread(new talkSend(5555, "localhost", 8888))).start();
(new Thread(new talkReceive(9999, "学生"))).start();
}
}
运行学生端:
dos窗口运行老师端:
实现通讯:(有乱码问题改一下字节编码即可)