【发布时间】:2013-02-16 09:32:26
【问题描述】:
我按照 Boost.Asio 教程实现了一个简单的 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 一两次,但仅此而已。
我阅读了官方文档,但一无所获。有什么建议吗?
【问题讨论】:
-
server_address_ & server_port_ 应该可用,例如“localhost” & “25166”。
-
我认为你的
tcp::resolver::query在函数退出时被破坏了。 -
@PSIAlt
async_resolve()copiestcp::resolver::query对象 -
如果完成处理程序没有被调用——很可能你没有正确运行
io_service。显示io_service相关代码。
标签: c++ sockets boost boost-asio