我遵循Boost.Asio toturial來實現一個簡單的TCP客戶端,但是我在第一步被阻止, boost::asio::ip::tcp::resolver::async_resolve
不起作用,所述ResolverHandler不會被調用:boost.asio boost :: asio :: ip :: tcp :: resolver :: async_resolve不起作用
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」。 – 2013-02-16 09:34:29
我想你的'tcp :: resolver :: query'在函數退出時被銷燬。 – PSIAlt 2013-02-16 10:26:56
@PSIAlt''async_resolve()'[copies](http://stackoverflow.com/a/12802484/283302)'tcp :: resolver :: query'對象 – 2013-02-16 15:12:34