首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UDP数据包字节读取粒度?

UDP数据包字节读取粒度?
EN

Stack Overflow用户
提问于 2017-05-11 09:06:08
回答 1查看 285关注 0票数 0

我有UDP客户端和服务器应用程序,以及UDP上的自定义协议。

每个“协议包”都包含有有效负载大小的报头,以及单独的有效负载。

每个“协议包”不超过MTU大小,期望没有碎片。

目前,我正在使用ASIO库,并且遇到了一些问题:

时间图:

  1. 客户端发送头(2字节)和有效载荷(N < MTU-2字节)
  2. 服务器只读取两个字节,以确定有效负载大小。
  3. 具有有效负载大小的服务器接收报头
  4. 服务器试图接收N字节的有效载荷……什么都没有。完成处理程序永远不会发生。

如果客户端再发送一个数据包(用于调试),那么服务器完成处理程序就会被触发--这就是为什么我认为我的asio异步循环是可以的。

另外,如果服务器试图读取每次读取的全部传输2+N字节,则所有数据都会收到。

所以我有点困惑。通过连续执行_socket.async_receive_from(),可以顺序地读取一个UDP数据报的不同字节。

会很乐意帮忙的,谢谢提前。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-11 09:54:34

通过连续执行_socket.async_receive_from(),可以顺序地读取一个UDP数据报的不同字节。

如果这是一个声明,它是不正确的,如果这是一个问题,答案是‘否’。UDP是一个数据报,protocol.You获取整个数据报,否则什么也得不到。如果您阅读其中的一部分,则其余部分将被丢弃。

可能您正在寻找readv()recvmsg(),这允许您分散阅读。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43911069

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档