Java套接字包读取重叠

时间:2014-01-03 05:12:30

标签: java sockets networking tcp serversocket

我想要在接收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个数据包而不重叠。

1 个答案:

答案 0 :(得分:1)

  

我想要在接收4个连续数据包的端口上读取数据包。

不是TCP,你不是。 TCP是字节流协议。没有'包'。

  

当我使用输入流读取数据时,有时数据会重叠。意味着有时候下一个数据包正在与之前的数据包合并。

这完全是预料之中的。这就是TCP的工作原理。没有包。没有消息边界。提交至write()的数据量与read()读取的数据量之间无保证通信。

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

  • 长度字前缀
  • 应用程序协议,例如type-length-value
  • 一种自描述协议,如对象序列化,XML等