【问题标题】:Taking the port from Boost Asio socket从 Boost Asio 套接字获取端口
【发布时间】:2015-02-19 23:08:56
【问题描述】:

我正在尝试使用 Boost Asio 服务器的客户端端口。

我在这里放了一些带有相关信息的代码:

客户:

        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

我不明白为什么。

非常感谢!

【问题讨论】:

    标签: c++ sockets boost port


    【解决方案1】:

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

    【讨论】:

    • 哦!非常感谢!你是老板 :P 效果很好!我不知道操作系统对客户端的随机访问。非常感谢您解决它并提供免费知识!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-15
    • 2011-12-05
    • 2020-02-27
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 2012-11-10
    相关资源
    最近更新 更多