从Boost Asio插座接收端口

时间:2014-12-21 19:06:16

标签: c++ sockets boost port

我正试图占用Boost Asio Server的客户端端口。

我在这里提供了一些包含相关信息的代码:

客户端:

        boost::asio::io_service io_service;
        boost::asio::ip::tcp::socket client_socket(io_service);
        boost::asio::ip::tcp::resolver resolver(io_service);
        boost::asio::connect(client_socket, resolver.resolve({"127.0.0.1", "50013" }));

服务器:

    const int SERVER_PORT = 50013;

    boost::asio::io_service io_service;
    server(io_service, SERVER_PORT);
    boost::asio::ip::tcp::endpoint endpoint(boost::asio::ip::tcp::v4(), SERVER_PORT);
    boost::asio::ip::tcp::acceptor acceptor(io_service, endpoint);
    boost::asio::ip::tcp::socket* socket = new boost::asio::ip::tcp::socket(io_service);
    acceptor.accept(*socket);

我用指针声明了套接字,因为在我的代码中有函数。 然后在服务器中我有这样的东西,用于做我的日志(我只粘贴部分端口)。

unsigned short port = socket->remote_endpoint().port();
...
fprintf(pFile, "%hu\n",port);
...

我的问题是,在我的文件(fprintf)中,它出现的端口不是50013。 在具体内容中,它显示为: 61964

我不明白为什么。

非常感谢!

1 个答案:

答案 0 :(得分:1)

如果我正确理解了您的问题,则会在服务器端调用代码中的fprintf。因此remote_endpoint().port()将等于客户端用于连接服务器的端口,并且此端口将由OS从动态端口范围中随机选择。它不会等于50013,因为您的客户端/服务器应用程序通过localhost进行通信,因此服务器已经使用了端口50013。如果你真的想要它打印50013,你应该使用local_endpoint()