【问题标题】:Obtaining public IP address rather than localhost (Boost Asio)获取公共 IP 地址而不是 localhost (Boost Asio)
【发布时间】:2012-12-10 13:06:20
【问题描述】:

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

【问题讨论】:

  • 你是指PC的局域网地址还是路由器的公网地址?
  • 您的 WAN 访问配置是怎样的?
  • 我无法假设如何配置 WAN 访问,这必须非常笼统。我需要找到一种方法来推断其他主机可以通过该公共地址将数据包发送到此接受器

标签: c++ sockets networking boost


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2012-06-26
    • 2010-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-16
    • 2019-02-01
    • 2017-09-23
    相关资源
    最近更新 更多