gpt4 book ai didi

Java Socket 数据包读取重叠

转载 作者:行者123 更新时间:2023-12-01 13:40:05 26 4
gpt4 key购买 nike

我正在尝试在接收 4 个连续数据包的端口上读取数据包。当我尝试使用输入流读取该数据时,有时数据会重叠。意味着有时下一个数据包会与之前的数据包合并。这是我正在遵循的过程

1. For every connection opening a new socket and starting a thread.

//Open a port on server socket.
//While new Socket
//accept a socket connection.
//Start a new thread for that socket.



2. After that in threads run method tring to get all four packets
for(int i=0;i<4;i++)
{
InputStream inputDataStream=socket.getInputStream();
//Than converting it to byte array.
}

处理此字节数组时,有时数据包与前一个数据包重叠。我如何读取所有 4 个数据包而不重叠。

最佳答案

I am tring to read packets on a port which is receiving 4 consecutive packets.

对于 TCP,你不是。 TCP 是一种字节流协议(protocol)。没有“数据包”。

When i am tring to read that data using input stream some times data is overlapping. Means sometime next packet is merging with previous packets.

这完全是可以预料到的。这就是 TCP 的工作原理。没有数据包。没有消息边界。无法保证提供给 write() 的数据量与 read() 读取的数据量之间的对应关系。

如果你想要消息,你必须自己实现它们,例如:

  • 长度单词前缀
  • 应用协议(protocol),例如类型-长度-值
  • 自描述协议(protocol),例如对象序列化、XML 等。

关于Java Socket 数据包读取重叠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20896980/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com