如何在不知道 service/port 的情况下让 ASIO 解析 IP 地址?

How to make ASIO resolve IP address without knowing the service/port?

如何让 ASIO 在不提供 port/service 名称的情况下解析域名?

据我所知,ASIO 在解析时需要 port number or service name。为什么?我该怎么做 nslookup example.com 这样的事情?不提供服务名称只会让 ASIO 生成错误“tcp::resolver:找不到服务”。

(SO 上的 other answers 没有帮助。它从地址解析名称。但我想要另一种方式。)

我会传递任意服务端口。比如“1”。忽略它。

为了非常纯粹,您可以告诉查询不需要解析该服务:

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

int main() {
    using boost::asio::ip::tcp;
    using query = tcp::resolver::query;

    query q("www.example.com", "1", query::numeric_service);
    tcp::resolver r(boost::asio::system_executor{});

    for (auto ep : r.resolve(q)) {
        std::cout << ep.endpoint().address() << "\n";
    }
}

在我的盒子上,它打印:

93.184.216.34
[2606:2800:220:1:248:1893:25c8:1946]

有更多可用标志,因此您可以查看 documentation for them(例如解析 CNAME 记录)。