当前位置:  开发笔记 > 编程语言 > 正文

boost :: asio只能接收完整的UDP数据报吗?

如何解决《boost::asio只能接收完整的UDP数据报吗?》经验,为你挑选了1个好方法。

我正在使用boost :: asio构建的UDP服务器,我从教程中开始定制我的需求.当我调用socket.receive_from(boost::asio::buffer(buf), remote, 0, error);它时,用数据包中的数据填充我的缓冲区,但是,如果我的理解是正确的,它会丢弃任何不适合缓冲区的数据.对receive_from的后续调用将接收下一个可用的数据报,因此在我看来,即使没有通知,也会有一些数据丢失.我理解这是错误的方式吗?

我试着一遍又一遍地阅读boost :: asio文档,但我没有设法找到关于我应该以正确的方式做到这一点的线索.我想做的是读取一定数量的数据,以便我可以处理它; 如果读取整个数据报是唯一的方法,我可以管理它,但是我怎么能确保不丢失我收到的数据?我应该使用什么缓冲区大小来确定?有什么方法可以告诉我我的缓冲区太小而且我丢失了信息吗?

我不得不假设我可能会收到大量的数据报.



1> andri..:

这不是特定的提升; 这就是数据报套接字的工作原理.您必须指定缓冲区大小,如果数据包不适合缓冲区,则它将被截断,并且无法恢复丢失的信息.

例如,SNMP协议指定:

该协议的实现不需要接受长度超过484个八位字节的消息.但是,建议实现在可行的情况下支持更大的数据报.

简而言之:在设计通信协议时,您必须考虑到数据报可能会丢失,或者它们可能被截断超出某些指定的大小.

推荐阅读
女女的家_747
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有