TalkReceive.java
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
public class TalkReceive implements Runnable{
//1.使用DatagramSocket,指定端口创建接收端
private DatagramSocket server;
private int port;
private String from;
public TalkReceive(int port,String from){
this.port = port;
this.from = from;
try {
this.server = new DatagramSocket(port);
} catch (SocketException e) {
e.printStackTrace();
}
}
@Override
public void run() {
while(true){
//2.准备容器封装成DatagramPacket
byte[] buf = new byte[1024*10];
DatagramPacket p = new DatagramPacket(buf, buf.length);
//3.阻塞式接收
try {
server.receive(p);
//4.分析数据
String data = new String(p.getData());
System.out.println(from+":"+data);
if(data.equals("bye")){
break;
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//5.释放资源
server.close();
}
}
TalkSend.java
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
import java.net.SocketException;
public class TalkSend implements Runnable{
//1.使用DatagramSocket,指定端口创建发送端
private DatagramSocket client;
private String toHost;
private int toPort;
public TalkSend(int port,String toHost,int toPort){
this.toHost = toHost;
this.toPort = toPort;
try {
client = new DatagramSocket(port);
} catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public void run() {
//2.准备数据,转成字节数组
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
while(true){
String data;
try {
data = br.readLine();
byte[] buff = data.getBytes();
//3.封装成DatagramPacket 包裹,需要指定目的地
DatagramPacket p = new DatagramPacket(buff, 0, buff.length, new InetSocketAddress(this.toHost, this.toPort));
//4.发送包裹send(DatagramPacket p)
client.send(p);
if(data.equals("bye")){
break;
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//5.释放资源
client.close();
}
}
TalkTeacher.java
public class TalkTeacher {
public static void main(String[] args) {
new Thread(new TalkReceive(9999,"学生")).start();
new Thread(new TalkSend(5555, "localhost", 6500)).start();
}
}
TalkStudent.java
public class TalkStudent {
public static void main(String[] args) {
new Thread(new TalkSend(7777, "localhost", 9999)).start();
new Thread(new TalkReceive(6500,"老师")).start();
}
}