使用Boost Asio查找服务器IP

时间:2017-04-18 08:24:04

标签: c++ boost-asio

我正在使用Boost ASIO库在C ++中编写客户端。我想得到服务器IP的字符串表示形式,以显示在我的客户端日志中。有谁知道怎么做?

3 个答案:

答案 0 :(得分: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中从未见过这样的功能。

答案 1 :(得分:0)

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

这应该可以解决问题!

答案 2 :(得分: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