我想要在接收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个数据包而不重叠。
答案 0 :(得分:1)
我想要在接收4个连续数据包的端口上读取数据包。
不是TCP,你不是。 TCP是字节流协议。没有'包'。
当我使用输入流读取数据时,有时数据会重叠。意味着有时候下一个数据包正在与之前的数据包合并。
这完全是预料之中的。这就是TCP的工作原理。没有包。没有消息边界。提交至write()
的数据量与read()
读取的数据量之间无保证通信。
如果你想要消息,你必须自己实现它们,例如: