套接字ReceiveAsync合并数据包
我打算通过套接字接收数据包,但由于它们是从发送方以高频率发送的,因此它们中的一些被打包成单个byte
数组。 然后SocketAsyncEventArgs.Buffer
保存多个数据包,即使它们是单独发送的(使用wireshark
validation)。
我已经尝试对传入的数据包进行排队并异步处理它们,但我仍然得到相同的结果。
这种行为可能是什么原因?
这就是TCP的工作原理。 TCP连接是双向字节流 ,您必须将其视为这样。 从一端单个发送可能导致接收端的多次读取,反之亦然,多次发送可能最终在一次读取中,并且传输不保留应用程序消息边界。
您必须缓冲输入,直到您知道有完整的应用程序消息。 常见的方法是:
- 固定长度的消息,
- 消息前面的预先挂起的长度,
- 使用特殊的“消息结束”分隔符分隔流。
我可能会误会,但这不是纳格尔算法的开头吗? 你的套接字应该有一个禁用它的标志。