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

学习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条回答 默认 最新

  • 冰山76 2022-06-08 06:14
    关注

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

    评论

报告相同问题?

问题事件

  • 创建了问题 6月8日

悬赏问题

  • ¥30 远程帮我安装软件及库文件
  • ¥15 关于#自动化#的问题:如何通过电脑控制多相机同步拍照或摄影(相机或者摄影模组数量大于60),并将所有采集的照片或视频以一定编码规则存放至规定电脑文件夹内
  • ¥20 深信服vpn-2050这台设备如何配置才能成功联网?
  • ¥15 Arduino的wifi连接,如何关闭低功耗模式?
  • ¥15 Android studio 无法定位adb是什么问题?
  • ¥15 angular项目错误
  • ¥20 需要帮我远程操控一下,运行一下我的那个代码,我觉得我无能为力了
  • ¥20 有偿:在ubuntu上安装arduino以及其常用库文件。
  • ¥15 请问用arcgis处理一些数据和图形,通常里面有一个根据点划泰森多边形的命令,直接划的弊端是只能执行一个完整的边界,但是我们有时候会用到需要在有很多边界内利用点来执行划泰森多边形的命令
  • ¥30 在wave2foam中执行setWaveField时遇到了如下的浮点异常问题,请问该如何解决呢?