提升asio服务器客户端。连接局域网中的两台计算机

时间:2014-08-28 13:39:25

标签: c++ sockets networking boost-asio

我编写了一个程序,用于在同一局域网中的两台计算机之间同步文件,就像DropBox一样。它可以完美地将文件从一个文件夹同步到同一台计算机中的另一个文件夹,但是当我想在两台计算机之间测试程序时,它无法连接到另一台计算机。

我的路由器的IP是192.168.1.1,一个主机的IP是192.168.1.101(主机A),另一个是192.168.1.107(主机B),它们都在同一局域网。主机A运行客户端程序,主机B运行服务器程序。当主机A尝试连接到主机B时,它会失败并显示如下消息:

  

连接尝试失败,因为连接方在一段时间后没有正确响应,或者由于连接主机无法响应而建立连接失败

我只是不知道连接到局域网中另一台计算机的问题是什么,并且我显示了连接代码。

客户端:

bool Send::CheckConnect(boost::asio::ip::tcp::socket& socket)
{
    boost::asio::io_service io_connect;
    boost::asio::ip::tcp::resolver resolver(io_connect);
    boost::asio::ip::tcp::resolver::query query("192.168.1.107", "6873");
    boost::asio::ip::tcp::resolver::iterator endpoint_iterator = resolver.resolve(query), end;
    boost::system::error_code error_connect;

    unsigned short count = 0;
    while( count < 3 )
    {
        ++count;
        if( boost::asio::connect(socket, endpoint_iterator, error_connect) != end )
            return true;                         
    }
    std::cout<<boost::system::system_error(error_connect).what()<<std::endl;
    return false;
}

服务器:

boost::asio::io_service io_sev;
boost::asio::ip::tcp::acceptor accept_server( io_sev, boost::asio::ip::tcp::endpoint
    (boost::asio::ip::tcp::v4(), 6873) );
unsigned count = 0;
boost::asio::ip::tcp::socket socket_server(io_sev);

1 个答案:

答案 0 :(得分:1)

在服务器端,我看不到任何acceptasync_accept! 你需要这样的东西:

void ConnectionServer::creatSocketAndAccept()
{
    //Accept the next connection.
    acceptor.async_accept(socket,
        boost::bind(&ConnectionServer::handle_accept, this, boost::asio::placeholders::error)
    );
}

如果是accept(因为您使用了connect而不是async_connect),则无需为接受处理程序提供boost::bind

希望有所帮助