我有一台服务器从客户端接收一个压缩字符串(用zlib压缩),并且我使用boost::asio
库中的async_receive
来接收这个字符串,但事实证明,不能保证所有字节都会被接收到,所以我现在必须将其更改为async_read
。我面临的问题是收到的字节大小是可变的,所以我不知道如何使用async_read
而不知道要接收的字节数。与async_receive
我只是有一个boost::array<char, 1024>
,但是这是一个缓冲区,不一定完全填满。boost :: asio async_read保证所有字节被读取
我想知道是否有人可以建议一个解决方案,我可以使用async_read,即使我不知道预先收到的字节数?
void tcp_connection::start(boost::shared_ptr<ResolverQueueHandler> queue_handler)
{
if (!_queue_handler.get())
_queue_handler = queue_handler;
std::fill(buff.begin(), buff.end(), 0);
//socket_.async_receive(boost::asio::buffer(buff), boost::bind(&tcp_connection::handle_read, shared_from_this(), boost::asio::placeholders::error));
boost::asio::async_read(socket_, boost::asio::buffer(buff), boost::bind(&tcp_connection::handle_read, shared_from_this(), boost::asio::placeholders::error));
}
buff
是boost::array<char, 1024>
+1对一些可能的解决方案的不错总结 – 2011-02-08 14:37:36