我有UDP客户端和服务器应用程序,以及UDP上的自定义协议。
每个“协议包”都包含有有效负载大小的报头,以及单独的有效负载。
每个“协议包”不超过MTU大小,期望没有碎片。
目前,我正在使用ASIO库,并且遇到了一些问题:
时间图:
如果客户端再发送一个数据包(用于调试),那么服务器完成处理程序就会被触发--这就是为什么我认为我的asio异步循环是可以的。
另外,如果服务器试图读取每次读取的全部传输2+N字节,则所有数据都会收到。
所以我有点困惑。通过连续执行_socket.async_receive_from(),可以顺序地读取一个UDP数据报的不同字节。
会很乐意帮忙的,谢谢提前。
发布于 2017-05-11 09:54:34
通过连续执行_socket.async_receive_from(),可以顺序地读取一个UDP数据报的不同字节。
如果这是一个声明,它是不正确的,如果这是一个问题,答案是‘否’。UDP是一个数据报,protocol.You获取整个数据报,否则什么也得不到。如果您阅读其中的一部分,则其余部分将被丢弃。
可能您正在寻找readv()或recvmsg(),这允许您分散阅读。
https://stackoverflow.com/questions/43911069
复制相似问题