1

我正在将 async_read 与 streambuf 一起使用。但是,我想将读取的数据量限制为 4,这样我就可以在进入正文之前正确处理标题。

如何使用 async_read 做到这一点?

4

3 回答 3

5

使用两个async_read操作,第一个读取 4 字节标头,第二个读取消息正文。您的第一个处理程序async_read应该async_read为消息正文启动。

asio 示例在几个地方使用了这种技术,序列化示例就是其中之一。我也回答了一个类似的问题,虽然它使用同步读取,但概念是一样的。

于 2010-09-22T14:36:42.510 回答
1

您可以使用transfer_at_least作为async_read 上的 CompletionCondition来保证标头可用。

一旦处理了初始标头,就可以处理任何多余的正文数据(或进一步的标头)。

于 2010-09-22T14:37:39.820 回答
0
boost::asio::transfer_exactly(streambuf.size()) 

是你所需要的。试着像这样使用:

boost::asio::async_read(socket_, 
                        buf,boost::asio::transfer_exactly(size_),
                        boost::bind(callback,
                        boost::asio::placeholders::error));
于 2014-07-25T04:01:21.290 回答