c++ - 从 Boost Asio 套接字获取端口

标签 c++ sockets boost port

我正在尝试获取 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

我不明白为什么。

非常感谢!

最佳答案

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

关于c++ - 从 Boost Asio 套接字获取端口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27592731/

相关文章:

boost - CMake FindBoost 为 -mt-s 库后缀

c++ - 试图编写一个程序来分析数学方程式,转换为后缀表示法,然后再求解吗?

c++ - std::any_of 与顺序执行策略一起使用时是否保证迭代顺序?

c++ - 将 remove_if 与 C 空终止字符串一起使用

c - memcpy uint16_t 到 char* 用于 UDP 传输

C# 套接字服务器端口

c++ - 需要帮助了解有关仅 header 库的 Boost 常见问题解答

c++ - Python distutils 拒绝识别已安装的 C++ 编译器,Python 3.5 下为 `Unable to find vcvarsall.bat`

sockets - 什么是 Erlang 最好、最有效的客户端池技术

c++ - bjam,如何找到 boost 构建