【问题标题】:Java Socket Packet Reading OverlappingJava Socket 数据包读取重叠
【发布时间】:2014-01-03 05:12:30
【问题描述】:

我正在尝试读取正在接收 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 个数据包而不重叠。

【问题讨论】:

    标签: java sockets networking tcp serversocket


    【解决方案1】:

    我正在尝试读取正在接收 4 个连续数据包的端口上的数据包。

    没有 TCP 你不是。 TCP 是一种字节流协议。没有“数据包”。

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

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

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

    • 一个长度词前缀
    • 应用协议,例如 type-length-value
    • 自描述协议,例如对象序列化、XML 等。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-14
      • 2011-04-04
      • 2014-06-16
      • 2013-12-24
      相关资源
      最近更新 更多