java - UDP 收到数据包但打印出有趣的结果

标签 java network-programming udp

我正在执行从发送方到接收方的简单 UDP file.txt 传输。它按提示到达。但是,当我打印内容时,有些内容正确显示,但有些内容与接收端收到的先前单词混在一起。

我的意思是: 该文本文件的内容 ALL IN ONE SENTENCE 如下:

返回日内瓦后,日复一日、一周复一周过去了;

例如在接收方:

天 后 日,r 周 后 周 通过了 离开 奥纳耶德 迈耶德 返回 托轮 日内瓦

代码是:

    byte[] byteArray = new byte[9999]; 
        DatagramSocket listenSocket = new DatagramSocket(5001, InetAddress.getByName("127.0.0.1")); 
    while(true) {   
        DatagramPacket segment = new DatagramPacket(byteArray, byteArray.length); 
        listenSocket.receive(segment); 
        ByteArrayInputStream byteIn = new ByteArrayInputStream(segment.getData()); 
        int data = byteIn.read(); 
        if(data == -1) { 
        //break; 
        } else { 
           System.out.println("Got: " + new String(segment.getData()));
        }

是的,TCP 会是一个更好的选择,但我需要帮助来了解为什么在这种情况下会发生这种情况。希望大家能够给我关于这个问题的见解。

最佳答案

您在第一次使用缓冲区后忘记将其清空 - 因此,如果连续接收获得的数据少于之前的数据,您将重新读取一些旧数据。

关于java - UDP 收到数据包但打印出有趣的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16636705/

相关文章:

java - Java中的多线程服务器程序

Java 如何确定进入UDP服务器的数据类型? XML 二进制

java - 仅适用于 LaF Nimbus 的空指针异常

选项卡上的 java actionlistener

java - 比较 struts ognl 值与 JSP 中的 scriptlet 值

java - 启动屏幕后不显示主要 Activity

algorithm - 开发可靠,简单的网络备份软件

c# - 通过 TCP 处理客户端/服务器通信 - 一般问题

c - bind() 抛出错误 EINVAL,Linux 上的 UDP 服务器

c# - 在指定网卡上接收udp数据包c#