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()) ; 
4

1 回答 1

2

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

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

 boost::asio::ip::tcp::endpoint endpoint = 
      boost::asio::ip::tcp::endpoint(boost::asio::ip::tcp::v4(),port);
于 2012-12-10T13:27:06.157 回答