c++ - 获取公共(public) IP 地址而不是本地主机 (Boost Asio)

标签 c++ sockets networking boost

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

相关文章:

java - 在java中连续使用触发事件用arduino控制直流电机

c++ - 获取 recv 函数的缓冲区长度

linux - 拦截来自本地机器的所有请求并为它们创建特定的响应

c++ - 如何转发声明内部类?

c# - 如何检测套接字断开连接?

c++ - 为什么只能在头文件中实现模板?

c - Arduino 处理开放网络套接字

c++ - 使网络更改永久化 - C++

c++ - QtChart - C++ - 保存未显示的图表

c++ - C++ 中带括号的作用域