0
我正在使用boost :: asio :: io_service来管理一些异步TCP通信。 asio版本是boost::asio 1.46
。当服务器关闭时,我想让客户端重新连接到服务器。无法重新连接升压asio套接字客户端
代码如下:
tot_client::tot_client(boost::asio::io_service& io_service,
tcp::resolver::iterator endpoint_iterator)
: io_service_(io_service),
socket_(io_service)
{
boost::shared_ptr<tcp::socket> ptr_temp(new tcp::socket(io_service));
socket_ptr =ptr_temp;
socket_ptr->async_connect(tcp::endpoint(boost::asio::ip::address_v4::loopback(),2012),
boost::bind(&tot_client::handle_connect, this,
boost::asio::placeholders::error));
}
如果服务器宕机,我的客户会检查插座是开放的。如果套接字未打开,它,然后尝试重新连接到服务器:
if(socket_ptr.use_count()&&socket_ptr->is_open())
{
//...
} else
{
reconnect();
}
重新连接代码是在这里:
void tot_client::reconnect()
{
try
{
std::cout<<" socket_ptr.reset(new tcp::socket(io_service_)); "<<endl;
socket_ptr.reset(new tcp::socket(io_service_));
//socket_ptr->connect(tcp::endpoint(boost::asio::ip::address_v4::loopback(),2012));
socket_ptr->async_connect(tcp::endpoint(boost::asio::ip::address_v4::loopback(),2012),
boost::bind(&tot_client::handle_connect, this,
boost::asio::placeholders::error));
}
catch (std::exception& e)
{
std::cerr<<e.what()<<endl;
}
}
插座async_connect
不起作用!如果我直接使用连接方法,服务器可以接收套接字,但客户端中的io_service
无法正常工作。
有人可以告诉我正确的方式来重新连接到服务器?非常感谢!
我不知道io_service对象仍在运行, – xuhao
我打电话io_service.reset(); io_service.run(); – xuhao
但它仍然无法正常工作。谢谢你的回复! – xuhao