我正在执行从发送方到接收方的简单 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/