Java UDP接收到数据包,但打印出有趣的结果
我正在做一个从发送方到接收方的简单UDP file.txt传输。它准时到达。。但是,当我打印内容时,有些内容输出正确,但有些内容与接收端接收到的之前的文字混在一起 我的意思是: 文本文件的内容全部包含在一句话中,如下所示: 日复一日,一周又一周,在我回到日内瓦的时候就去世了强> 例如,在接收器侧: 一天 之后 白天,r 威克 之后 威克 通过 逃避 奥奈德 迈耶德 返回 扭转 日内瓦 代码为:Java UDP接收到数据包,但打印出有趣的结果,java,network-programming,udp,Java,Network Programming,Udp,我正在做一个从发送方到接收方的简单UDP file.txt传输。它准时到达。。但是,当我打印内容时,有些内容输出正确,但有些内容与接收端接收到的之前的文字混在一起 我的意思是: 文本文件的内容全部包含在一句话中,如下所示: 日复一日,一周又一周,在我回到日内瓦的时候就去世了 例如,在接收器侧: 一天 之后 白天,r 威克 之后 威克 通过 逃避 奥奈德 迈耶德 返回 扭转 日内瓦 代码为: byte[] byteArray = new byte[9999]; Datag
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是一个更好的选择,但我需要帮助了解为什么会发生这种情况。我希望你们都能给我这个问题的见解 第一次使用缓冲区后忘记清空缓冲区-因此,如果连续接收得到的数据少于前一次,您将重新读取一些旧数据。UDP不能保证正确的顺序和重复保护。如果你需要这个,你必须使用TCP或者自己在UDP之上实现所有这些服务。好的,在看到你的回复后,我终于让它工作了。我所做的只是将缓冲区移动到while循环中,以清除之前存储的字。虽然这解决了您的问题,但效率很低:您将过多地分配和GC它。考虑将其消隐或使用接收长度为TuntCad。这是非常正确的点。好的,我会找到这个的java方法。你试过简单地将数组的前5个字节设置为0吗?