我有UDP客户端和服务器应用程序,以及UDP上的自定义协议。
每个"协议数据包"都包含有效载荷大小的标头,以及有效载荷本身。
每个"协议数据包"不超过MTU大小,期望缺少分段。
目前我正在使用ASIO库并遇到一些问题:
时间表 :
-
客户端发送标头(2 字节)和有效负载(N
-
服务器仅读取 2 个字节,以确定有效负载大小。
-
具有有效负载大小的服务器接收标头
-
服务器试图接收 N 字节的有效负载..... 什么都没有.永远不会发生完成处理程序 。
如果客户端再发送(出于调试目的)一个数据包,则会触发服务器完成处理程序 - 这就是为什么我认为我的 asio 异步循环没问题。
此外,如果服务器尝试每次读取整个传输 2+N 字节, 收到的所有数据。
所以我有点困惑.可以通过按顺序执行 _socket.async_receive_from() 来按顺序读取一个 UDP 数据报的单独字节。
会很高兴得到帮助, 提前谢谢.
可以通过按顺序执行 _socket.async_receive_from() 来按顺序读取一个 UDP 数据报的单独字节。
如果这是一个陈述,它是不正确的,如果它是一个问题,答案是"否"。UDP 是一种数据报协议。您可以获得整个数据报或什么都没有。如果您阅读其中的一部分,则其余部分将被丢弃。
可能您正在寻找readv()
或recvmsg()
,它们允许您分散阅读。