我设置了以下连接,它工作正常。这是一段更大的代码的一部分,它监听(在一个自由端口)传入的消息。我想要做的是发布 uri,以便其他客户端可以连接到它。但是我想不出一种方法让 endpoint.address() 显示为正在使用的接口(interface)上的实际 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()) ;
最佳答案
Boost ASIO 无法枚举您计算机的所有接口(interface)。解析器查询您的 DNS 以获取您的 IP,女巫不一样,因为它可以返回您在其中配置的任何内容(甚至可以检索不准确的信息)。
如果要绑定(bind)到默认接口(interface)。你不需要下决心。 只需使用以下端点创建套接字:
boost::asio::ip::tcp::endpoint endpoint =
boost::asio::ip::tcp::endpoint(boost::asio::ip::tcp::v4(),port);
关于c++ - 获取公共(public) IP 地址而不是本地主机 (Boost Asio),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13801569/