如何在不知道 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 记录)。
如何让 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 记录)。