我正试图占用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
我不明白为什么。
非常感谢!
答案 0 :(得分:1)
如果我正确理解了您的问题,则会在服务器端调用代码中的fprintf
。因此remote_endpoint().port()
将等于客户端用于连接服务器的端口,并且此端口将由OS从动态端口范围中随机选择。它不会等于50013,因为您的客户端/服务器应用程序通过localhost进行通信,因此服务器已经使用了端口50013。如果你真的想要它打印50013,你应该使用local_endpoint()
。