嗯790
2022-06-08 00:29
采纳率: 0%
浏览 11

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

1条回答 默认 最新

相关推荐 更多相似问题