【发布时间】:2016-11-04 14:43:22
【问题描述】:
我正在学习 boost 的 asio 教程。我正在调查他们的chat example。更具体地说,我试图将他们的chat client 从发送者+接收者拆分为发送者和接收者,但我看到了一些我无法解释的行为。
设置包括:
boost::asio::io_service io_service;
tcp::resolver::iterator endpoint = resolver.resolve(...);
boost::thread t(boost::bind(&boost::asio::io_service::run, &io_service));
boost::asio::async_connect(socket, endpoint, bind(handle_connect, ... ));
发送部分实际上包括:
while (std::cin.getline(str))
io_service.post( do_write, str );
和
void do_write (string str)
{
boost::asio::async_write(socket, str, bind( handle_write, ... ));
}
接收部分由
组成void handle_connect(...)
{
boost::asio::async_read(socket, read_msg_, bind(handle_read, ...));
}
void handle_read(...)
{
std::cout << read_msg_;
boost::asio::async_read(socket, read_msg_, bind(handle_read, ...));
}
如果我注释掉handle_connect 的内容以隔离发送部分,我的其他客户端(使用原始代码编译)不会收到任何内容。如果我还原,则注释掉handle_read 的内容,我的其他客户端只收到第一条消息。
为什么必须调用async_read() 才能调用post() 和async_write()?
上面链接了完整的未修改代码。
【问题讨论】:
标签: tcp boost-asio