Ben*_*n J 3 c++ sockets network-programming boost-asio
我正在使用boost asio创建一个测试服务器来测试一个http客户端.这将在与客户端相同的计算机上运行.现在我想要做的是创建一个随机分配端口的服务器.我在这里看过这个帖子:使用boost :: asio有一种可移植的方式来查找自由端口号但我坦率地说仍然有点困惑.
我的代码看起来像这样:
boost::asio::io_service service;
tcp::acceptor acceptor(service);
unsigned short port(0);
tcp::endpoint endPoint(tcp::endpoint(tcp::v4(), port);
acceptor.open(endPoint.protocol());
acceptor.set_option(tcp::acceptor::reuse_address(true));
acceptor.bind(endPoint);
port = endPoint.port();
std::cout<<port<<std::endl; // prints 0
Run Code Online (Sandbox Code Playgroud)
我的想法是,通过创建一个端口"端口0",然后尝试绑定到该端口,它应该导致一个可用的端口被随机分配,但似乎并非如此.知道我做错了什么吗?
干杯.
boost::asio::io_service service;
boost::asio::ip::tcp::acceptor acceptor(service);
unsigned short port(0);
boost::asio::ip::tcp::endpoint endPoint(tcp::endpoint(tcp::v4(), port);
acceptor.open(endPoint.protocol());
acceptor.set_option(tcp::acceptor::reuse_address(true));
acceptor.bind(endPoint);
m_acceptor.listen();
boost::asio::ip::tcp::endpoint le = acceptor.local_endpoint(); //THIS LINE SOLVES IT
port = le.port();
// port = endPoint.port(); // This is didn't work for me
Run Code Online (Sandbox Code Playgroud)
您可以通过为接受器使用不同的构造函数来缩短它:
using boost::asio;
io_service service;
ip::tcp::acceptor acceptor(service, ip::tcp::endpoint(ip::tcp::v4(), 0));
unsigned short port = acceptor.local_endpoint().port();
Run Code Online (Sandbox Code Playgroud)
此构造函数在接受器上调用 open()、bind() 和 listen()。
| 归档时间: |
|
| 查看次数: |
3791 次 |
| 最近记录: |