发送端线程
/发送端
public class Send implements Runnable {
DatagramSocket socket;
BufferedReader reader;
private String localhost;
private int port;
private int FromPort;
public Send(String localhost, int port, int FromPort) {
this.localhost = localhost;
this.port = port;
this.FromPort = FromPort;
try{
socket = new DatagramSocket(FromPort);
reader = new BufferedReader(new InputStreamReader(System.in));
}catch(Exception e){
e.printStackTrace();
}
}
@Override
public void run() {
try {
while (true) {
String data = reader.readLine();
byte[] buffer = data.getBytes(StandardCharsets.UTF_8);
DatagramPacket packet = new DatagramPacket(buffer, 0, buffer.length, new InetSocketAddress(this.localhost, this.port));
socket.send(packet);
if ("bye".equals(data)) {
break;
}
}
socket.close();
} catch (SocketException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
接收端线程
public class Receive implements Runnable{
DatagramSocket socket = null;
private int port;
public Receive(int port){
this.port=port;
try {
socket = new DatagramSocket(port);
} catch (SocketException e) {
e.printStackTrace();
}
}
@Override
public void run() {
try {
while (true){
byte[] buffer = new byte[1024];
DatagramPacket packet = new DatagramPacket(buffer, 0, buffer.length);
socket.receive(packet);
String s = new String(packet.getData(), 0, packet.getLength());
System.out.println(Thread.currentThread().getName()+":"+s);
if ("bye".equals(s)){
break;
}
}
socket.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
然后再学生类和老师类中调用这两个线程,实现通信
学生类
public class Student {
public static void main(String[] args) {
//接收方的ip地址和端口号
Send send = new Send("localhost",9999,2000);
//我的接收端口
Receive receive =new Receive(8888);
new Thread(send).start();
new Thread(receive,"老师").start();
}
}
老师类
public class Teacher {
public static void main(String[] args) {
Send send = new Send("localhost",8888,555);
Receive receive =new Receive(9999);
new Thread(send).start();
new Thread(receive,"学生").start();
}
}
演示:
学生:
老师: