获取公共IP地址而不是localhost(Boost Asio)

时间:2012-12-10 13:06:21

标签: c++ sockets networking boost

我设置了以下连接,这可以正常工作。这是侦听(在自由端口)传入消息的更大代码段的一部分。我想要做的是发布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()) ; 

1 个答案:

答案 0 :(得分:2)

Boost ASIO无法枚举您计算机的所有界面。解析器查询您的DNS以获取您的IP,这与它可以返回您在其中配置的任何内容不同(即使可以检索到不准确的信息)。

如果要绑定到默认界面。你不需要解决问题。 只需使用以下端点创建套接字:

 boost::asio::ip::tcp::endpoint endpoint = 
      boost::asio::ip::tcp::endpoint(boost::asio::ip::tcp::v4(),port);