gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 11:23:09 26 4
gpt4 key购买 nike

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com