如果有人可以帮助我,我无法理解 boost::asio::read 函数在 boost asio 中的工作原理。在 boost 的示例中,他们在接收消息之前声明缓冲区大小,这是没有意义的(我如何知道在读取消息之前要读取多少字节?)
我尝试了这段代码,但它只是挂起
boost::asio::io_service io_service;
tcp::resolver resolver(io_service);
tcp::resolver::query query(tcp::v4(), "localhost", "3000");
tcp::resolver::iterator iterator = resolver.resolve(query);
tcp::socket sock(io_service);
boost::asio::connect(sock, iterator);
cout << "read start" << endl;
boost::system::error_code err_code;
// Read from client.
boost::asio::streambuf read_buffer;
int bytes_transferred = boost::asio::read(sock, read_buffer, err_code);
std::cout << "Read: " << make_string(read_buffer) << std::endl;
read_buffer.consume(bytes_transferred); // Remove data that was read.
通常,您可以从协议的定义中知道要读取多少字节。
在相反的情况下,你必须阅读字节一一并观察错误代码以在连接、文件等结束时停止。
同步方法(例如read
) 在 Boost.Asio 中对于简短的例子来说很不错,但在实际用例中你应该更喜欢异步版本async_read,这使您可以cancel要不就等待下一个数据块而不阻塞你的程序。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)