我打算通过套接字接收数据包,但由于它们是从发送方以高频率发送的,因此其中许多数据包被打包成一个byte
array. SocketAsyncEventArgs.Buffer
然后保存多个数据包,即使它们是单独发送的(使用验证wireshark
).
我已经尝试对传入数据包进行排队并异步处理它们,但我仍然得到相同的结果。
这种行为的原因可能是什么?
这就是 TCP 的工作原理。 TCP连接是一个双向字节流,你必须这样对待它。来自一端的单次发送可能会导致接收端发生多次读取,反之亦然,多次发送可能会导致单次读取,并且传输不会保留应用程序消息边界。
您必须缓冲输入,直到您知道您有完整的应用程序消息。常见的方法有:
- 固定长度的消息,
- 消息前面的前置长度,
- 使用特殊的“消息结束”分隔符分隔流。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)