繁体   English   中英

无法重新连接Boost Asio套接字客户端

[英]Unable to reconnect a boost asio socket client

我正在使用boost :: asio :: io_service来管理一些异步TCP通信。 asio版本是boost::asio 1.46 我想让客户端在服务器关闭时重新连接到服务器。

代码如下:

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不起作用! 如果我直接使用connect方法,则服务器可以接收套接字,但是客户端中的io_service仍然无法工作。

有人可以告诉我重新连接服务器的正确方法吗? 非常感谢!

您确定io_service仍在运行吗?

如果io_service在其用尽后停止工作,则需要致电

io_service.reset();
io_service.run();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM