gpt4 book ai didi

c# - Socket ReceiveAsync 合并数据包

转载 作者:可可西里 更新时间:2023-11-01 02:33:52 25 4
gpt4 key购买 nike

我打算通过套接字接收数据包,但由于它们是从发送方以高频率发送的,所以它们中的许多被打包到一个 byte 数组中。 SocketAsyncEventArgs.Buffer 然后保存多个数据包,即使它们是单独发送的(使用 wireshark 验证)。

我已经尝试对传入的数据包进行排队并异步处理它们,但我仍然得到相同的结果。

这种行为的原因可能是什么?

最佳答案

这就是 TCP 的工作原理。 TCP 连接是一个双向字节流,您必须这样对待它。来自一端的单次发送可能会导致接收方的多次读取,反之亦然,多次发送可能会以单次读取结束,并且传输不会保留应用程序消息边界。

你必须缓冲输入,直到你知道你有一个完整的应用程序消息。常见的方法是:

  • 固定长度的消息,
  • 消息前的前置长度,
  • 使用特殊的“消息结束”分隔符分隔流。

关于c# - Socket ReceiveAsync 合并数据包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6791022/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com