我编写了一个使用 boost:asio 库的程序,它在 2 个 tcp 服务器之间传输数据。一台服务器使用以下代码发送数据:
std::shared_ptr<std::string> s =
std::make_shared<std::string>(message);
boost::asio::async_write(socket_, boost::asio::buffer(*s),
std::bind(&TcpServer::HandleWrite, shared_from_this(), s, _1, _2));
在另一个 TcpServer 中,当我使用 async_read_until 获取数据时,一切正常,但是如果我将 async_read_until 替换为 async_read,则会出现End Of File
错误:
boost::asio::streambuf input_buffer;
boost::asio::async_read_until(socket_, input_buffer, match_condition(),
std::bind(&TcpServer::HandleRead, shared_from_this(), _1));
//boost::asio::async_read(socket_, input_buffer, boost::asio::transfer_all(),
// std::bind(&TcpServer::HandleRead, shared_from_this(), _1));
如果我boost::asio::transfer_at_least(1)
在 async_read 中使用,我可以获得预期的结果。
为什么会这样?