我编写了一个程序,用于在同一局域网中的两台计算机之间同步文件,就像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);

最佳答案

在服务器端,我看不到任何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作为接受处理程序。

希望能有所帮助

关于c++ - 提升asio服务器客户端。在局域网中的两台计算机之间连接,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25550270/

10-13 08:12