学习UDP时模拟发消息,接收端第一次接收时正常,但第二次就只能接收到回车了

学习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时:

img

在控制台输出1时:

img

网络软件开发,尤其是使用高层协议开发一定要在真实或虚拟网络环境下编写与测试,学会使用抓包分析软件,服务器端(发送端)发出了哪些数据包,是否符合我的发送要求,客户端(接收端)是否正常接受到服务器发送的数据包,然后分析你的发送接收是否正常,如果只是使用高层协议你不清楚中间发生了什么,如何找到原因所在?
从你给的代码看服务器发送三次,客户端接收三次,这个没问题,问题可能出在发送端,在发送数据前,先显示一下要发送的内容,看看内容对不对,然后再找其他原因