/**
* 接收信息
* 在本机测试
*/
public class UDPReciveTest implements Runnable{
private DatagramSocket node = null;
private int port;//接收信息的服务端口
private String msgFrom;
public UDPReciveTest(int port, String msgFrom) throws SocketException {
this.port = port;
this.msgFrom=msgFrom;
this.node = new DatagramSocket(port);//创建连接
}
@Override
public void run() {
//2.接收包
while(true){
try {
//接收消息
byte[] bytes = new byte[1024];
DatagramPacket packet = new DatagramPacket(bytes,0,bytes.length);
node.receive(packet);//阻塞式接收
String s = new String(packet.getData(), 0, packet.getLength());
System.out.println(msgFrom+":"+s);
if(s.equals("bye")){
break;
}
} catch (IOException e) {
e.printStackTrace();
}
}
node.close();
}
}
/**
* 发送消息服务
*/
public class UDPSendTest implements Runnable {
private DatagramSocket client = null;
private int toPort; //要发送到的服务端口
private String msgFrom;
public UDPSendTest( int toPort, String msgFrom) throws SocketException {
this.toPort = toPort;
this.msgFrom = msgFrom;
this.client = new DatagramSocket();//创建连接
}
@Override
public void run() {
while (true) {
try {
//建立控制台输入
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String msg = br.readLine();
//2.建立包
DatagramPacket packet = new DatagramPacket(msg.getBytes(), 0, msg.getBytes().length, InetAddress.getByName("127.0.0.1"), toPort);
//3.发送包
client.send(packet);
if (msg.equals("bye")) {
break;
}
} catch (IOException e) {
e.printStackTrace();
} finally {
}
}
client.close();
}
}
测试
public class StudentTest {
public static void main(String[] args) throws SocketException {
//开启2个线程
new Thread(new UDPSendTest(7777,"学生")).start();
new Thread(new UDPReciveTest(5555,"老师")).start();
}
}
public class TeacherTest {
public static void main(String[] args) throws SocketException {
//开启2个线程
new Thread(new UDPSendTest(5555,"老师")).start();
new Thread(new UDPReciveTest(7777,"学生")).start();
}
}