学习UDP时模拟发消息,接收端第一次接收时正常,但第二次就只能接收到回车了;但如果发送端在发送前先在控制台随便输出一下接收端又正常了。
发送端代码:
public class UdpSender {
public static void main(String[] args) throws Exception {
DatagramSocket socket = new DatagramSocket(9999);
DatagramPacket packet;
while(true){
//准备数据:控制台读取 System.in
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
//发包内数据
String data = reader.readLine();
byte[] datas = data.getBytes();
packet = new DatagramPacket(datas,0,datas.length,new InetSocketAddress("localhost",7777));
// System.out.print("1");
//发送包
socket.send(packet);
if (data.equals("bye")){
break;
}
}
//关闭流
socket.close();
}
}
接收端代码:
public class UdpReceive {
public static void main(String[] args) throws Exception {
DatagramSocket socket = new DatagramSocket(7777);
byte[] container = new byte[1024];
DatagramPacket packet = new DatagramPacket(container,0,container.length);
while(true){
//阻塞式接收
socket.receive(packet);
//断开连接
//将接收包转换为 String 格式
byte[] data = packet.getData();
String receiveData = new String(data,0,packet.getLength());
System.out.println("Data:"+receiveData);
if (receiveData.equals("bye")){
break;
}
}
socket.close();
}
}
未在控制台输出1时:
在控制台输出1时: