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