获取公网IP地址而非本地主机地址(Boost Asio)

3
我有以下连接设置,这个设置是正确的。这是一个更大的代码部分,它监听(在一个空闲端口),等待传入消息。我正在尝试发布URI,以便其他客户端可以连接到此处。然而,我无法找到一种方法使endpoint.address()出现为实际使用的接口上的IP地址,而不是“localhost”。有什么想法吗?
 tcp::resolver::query query(address, "");
 tcp:: endpoint endpoint = *resolver.resolve(query);
 acc.open(endp.protocol());
 acc.set_option(reuse_address(true));
 acc.bind(endp);
 acc.listen();

 tcp::endpoint endpoint =  acc.local_endpoint() ; 
 string uri = "tcp://" + endpoint.address().to_string() + ":" + lexical_cast<string>(endpoint.port()) ; 

2
你是指你的电脑的局域网地址还是路由器的公共地址? - Wutz
你的广域网接入配置是什么样子? - bobah
我不能假设WAN访问是如何配置的,必须非常普遍。我需要找到一种推断公共地址的方法,通过该地址其他主机可以向此接收器发送数据包。 - user1018513
1个回答

2
Boost ASIO没有枚举计算机所有接口的方法。解析器查询您的DNS以获取IP地址,这与它可以返回任何您在其中配置的内容不同(甚至可以检索到不准确的信息)。
如果您想绑定到默认接口,则无需进行解析。只需使用以下端点创建套接字即可:
 boost::asio::ip::tcp::endpoint endpoint = 
      boost::asio::ip::tcp::endpoint(boost::asio::ip::tcp::v4(),port);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接