我有 UDP 客户端和服务器应用程序,以及基于 UDP 的自定义协议。
每个“协议包”都包含带有有效负载大小的标头,以及本身的有效负载。
每个“协议数据包”不超过 MTU 大小,预计不会出现碎片。
目前我正在使用 ASIO 库并遇到一些问题:
时间图:
客户端发送标头(2 字节)和有效负载(N < MTU-2 字节)------>
服务器仅读取 2 个字节,以确保有效负载大小。
服务器接收具有有效负载大小的标头
服务器尝试接收 N 字节的有效负载......但什么也没有。完成处理程序永远不会发生。
如果客户端再发送一个数据包(出于调试目的),服务器完成处理程序就会被触发——这就是为什么我认为我的 asio 异步循环没问题。
此外,如果服务器尝试每次读取读取整个传输 2+N 个字节,则接收到所有数据。
所以我有点困惑。通过顺序执行 _socket.async_receive_from() 可以顺序读取一个 UDP 数据报的单独字节。
很高兴得到帮助,在此先感谢。