我想使用asio进行DNS反向查找(返回给定IP地址的主机名),但我无法确定实现此目的所需的组件。 Asio记录涉及ip::basic_resolver::resolve
,但需要endpoint_type
,我不知道如何使用它。
有人可以发帖或参考一个例子吗?
修改
在Joachim Pileborg的帮助下,我完成了任务。需要的代码(没有错误处理的Minumin):
#include <asio.hpp>
#include <string>
#include <iostream>
int main()
{
asio::ip::address_v4 ipa = asio::ip::address_v4::from_string("8.8.8.8");
asio::ip::tcp::endpoint ep;
ep.address(ipa);
asio::io_service io_service;
asio::ip::tcp::resolver resolver(io_service);
asio::ip::tcp::resolver::iterator destination = resolver.resolve(ep);
std::cout << destination->host_name() << std::endl;
return 0;
}
答案 0 :(得分:7)
我自己没有在Boost ASIO中使用过解析器,但是阅读参考文档似乎不应该直接使用ip::basic_resolver
。相反,你应该使用例如ip::tcp::resolver
在这种情况下,endpoint
是ip::tcp::endpoint
的实例。
由于每个主机可以有多个主机名,因此OPs解决方案可以像这样扩展:
asio::ip::tcp::resolver::iterator itr = resolver.resolve(ep);
asio::ip::tcp::resolver::iterator end;
for (int i = 1; itr != end; itr++, i++)
std::cout << "hostname #" << i << ": " << itr->host_name() << '\n';