我正在通过boost的asio教程工作。我正在调查他们的chat example。更具体地说,我试图将他们的chat client从发送者+接收者分割为发送者和接收者,但是我看到一些我无法解释的行为。发送TCP数据,无需接收(升压asio)
的设置包括:
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, ...));
发送部有效conisists的:
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()
?
完整的未经修改的代码链接在上面。
你是对的。我将这些工作添加到了io_service中,并且效果很好。谢谢! – Stewart