2012-12-10 116 views
2

我有以下連接設置,這工作正常。這是偵聽(在一個空閒端口)傳入消息的更大代碼的一部分。我試圖做的是發佈uri,以便其他客戶端可以連接到此。但是我找不出一個方法讓endpoint.address()顯示爲所用接口上的實際IP地址,而不是「localhost」。有任何想法嗎?獲取公共IP地址而不是本地主機(升壓阿西歐)

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()) ; 
+2

你的意思是你的PC或路由器的公網地址的LAN地址? – Wutz

+0

你的WAN訪問配置是什麼樣的? – bobah

+0

我無法對如何配置WAN訪問進行假設,這必須非常一般。我需要找到一種方法來推斷公共地址,通過這個地址,其他主機可以將數據包發送給這個接受者 – user1018513

回答

2

Boost ASIO無法枚舉您的計算機的所有接口。解析器向您的DNS查詢您的IP,女巫不一樣,因爲它可以返回您在其中配置的任何內容(甚至可以檢索到不真實的信息)。

如果你想綁定到默認接口。你不需要做出決定。 只需創建一個具有以下端點插座:

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