我打算通过套接字接收数据包,但由于它们是从发送方以高频率发送的,因此其中一些数据被打包到一个byte
数组中。 SocketAsyncEventArgs.Buffer
然后保留多个数据包,即使它们是单独发送的(使用wireshark
进行验证)。
我已经尝试对传入的数据包进行排队并异步处理它们,但我仍然得到相同的结果。
这种行为可能是什么原因?
答案 0 :(得分:7)
这就是TCP的工作原理。 TCP连接是一个双向字节流,你必须这样处理它。从一端进行单次发送可能会导致接收端出现多次读取,反之亦然,多次发送可能会在一次读取中结束,并且传输不会保留应用程序消息边界。
您必须缓冲输入,直到您知道有完整的应用程序消息。常见的方法是:
答案 1 :(得分:-3)
我可能会误会,但这不是Naggle算法的推动吗? 你的套接字应该有一个禁用它的标志。