2017-04-18 123 views
1

我正在使用Boost ASIO庫在C++中編寫客戶端。我希望獲得服務器IP的字符串表示形式,以顯示在我的客戶端日誌中。有誰知道該怎麼做?使用Boost ASIO查找服務器IP

+0

任何暗示對「網絡狀態」使用boost ASIO表示讚賞。 –

+0

識別和報告「網絡狀態」對我而言是一個完全不同的問題。 – moooeeeep

+0

這裏仍然是一個懸而未決的問題。 @moooeeeep – CMouse

回答

1

就獲取IP而言,套接字具有檢索遠程端點的功能。我給這條產業鏈的命令,他們應該獲取遠端IP地址的字符串表示:

asio::ip::tcp::socket socket(io_service); 
// Do all your accepting and other stuff here. 

asio::ip::tcp::endpoint remote_ep = socket.remote_endpoint(); 
asio::ip::address remote_ad = remote_ep.address(); 
std::string s = remote_ad.to_string(); 

對於從來沒有見過這樣的ASIO功能連通性的觀點。

+0

網絡連接的東西呢? – CMouse

+0

我也在尋求相同的幫助。 –

0
std::string s = boost::lexical_cast<std::string>(socket.remote_endpoint()); 

這應該是訣竅!

0

您可能希望做主機查找:

#include <iostream> 
#include <boost/asio.hpp> 
#include <boost/range/iterator_range.hpp> 

using boost::asio::ip::tcp; 

int main() { 
    char name[64], domain[64]; 
    if (::gethostname(name, 64))  ::perror("gethostname failed"); 
    if (::getdomainname(domain, 64)) ::perror("getdomainname failed"); 

    boost::asio::io_service ios; 
    tcp::resolver res(ios); 

    std::string name_s(name), domain_s(domain); 

    for (auto match : boost::make_iterator_range(res.resolve({name_s+"."+domain_s, "0"}), {})) { 
     std::cout << name << " -> " << match.endpoint().address() << "\n"; 
    } 
} 

這可能會打印出類似這樣

desktop.fritz.box -> 192.168.182.20