我按照Boost.Asio toturial实现了一个简单的TCP客户端,但是我在第一步就被阻止了,boost::asio::ip::tcp::resolver::async_resolve
不起作用,ResolverHandler 永远不会被调用:
void client::start()
{
socket_.reset(new boost::asio::ip::tcp::socket(io_service_));
// Start an asynchronous resolve to translate the server and service names
// into a list of endpoints.
tcp::resolver::query query(server_address_, server_port_);
resolver_.async_resolve(query,
boost::bind(&client::handle_resolve,
shared_from_this(),
boost::asio::placeholders::error,
boost::asio::placeholders::iterator));
}
如上面所示的源代码,我创建了一个 io_service
、一个 socket
、一个 resolver
和一个解析器 query
对象,然后调用 resolver_.async_resolve()
方法,但是 ResolverHandler client::handle_resolve
几乎不会被调用,有时在应用程序第一次启动时, ResolverHandler 可能会被调用一两次,但仅此而已。
我阅读了官方文档,但一无所获。有什么建议吗?
最佳答案
如果完成处理程序没有被调用——很可能你没有正确运行io_service
:例如。它的 run
循环可能被其他未返回的处理程序阻塞,或者可能由于缺乏工作而退出等。
关于c++ - boost.asio boost::asio::ip::tcp::resolver::async_resolve 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14908860/