C++ Asio:异步读取和异步接收之间的区别

C++ Asio:异步读取和异步接收之间的区别,c++,boost,c++11,C++,Boost,C++11,和之间有什么区别?第一个是自由函数,第二个是成员函数 另一个区别是socket\u base::message\u flags flags参数。例如,请参见手册页面中的可能值 编辑: 使用async\u receive您需要检查得到的字节数。如果您想以最大N字节的速度读取,而使用async\u read,则使用它。抱歉,从boost文档中可以明显看出这一点。async\u receive是一个函数,它只接收缓冲区中的数据,但可能不会收到您要求的金额。(它将等于或小于,永远不会超过。) 然而,as

和之间有什么区别?

第一个是自由函数,第二个是成员函数

另一个区别是
socket\u base::message\u flags flags
参数。例如,请参见手册页面中的可能值

编辑:
使用
async\u receive
您需要检查得到的字节数。如果您想以最大N字节的速度读取,而使用
async\u read
,则使用它。抱歉,从boost文档中可以明显看出这一点。

async\u receive
是一个函数,它只接收缓冲区中的数据,但可能不会收到您要求的金额。(它将等于或小于,永远不会超过。)

然而,
async\u read
将始终收到您要求的金额,因为它声明:

此函数用于从流异步读取一定数量的字节数据。函数调用总是立即返回。异步操作将继续,直到满足以下条件之一:

  • 提供的缓冲区已满。也就是说,传输的字节等于缓冲区大小之和
  • 发生了一个错误

页面上唯一有点模糊的是
async\u read
如果没有那么多字节,并且连接正常关闭,它会做什么。(这算不算“错误”?)这可能可以通过快速测试来确定。(
async_-receive
,但是,它只会给你它得到的东西。)

什么时候我会使用一个而不是另一个?“如果需要确保在异步操作完成之前收到请求的数据量,请考虑使用async_-read函数。”那么这是否意味着如果我使用async_-receive,我可能无法获得所有数据,但是错误标志会说一切正常?我真的不确定这行是什么意思。从async_recieve的链接:“接收操作可能不会接收所有请求的字节数。”所以,是的。网络内容通常是这样工作的:你可能无法得到你想要的一切(对方没有发送,它还在传输中,等等)。async_read是一个方便的功能,如果你知道你想要X字节,它会一直为你尝试。太完美了,谢谢。介意把它写进一个答案吗?这样我就可以接受了。他们做不同的事情。一个只是读取,另一个读取特定数量或错误。看到你链接的页面-他们会告诉你。回答我自己的问题:如果async_read没有获得字节数,因为流在获得请求的大小之前正常关闭,那么将调用读取处理程序,错误为boost::asio::error::eof。