Roson的Qt之旅#96 QDnsLookup(DNS查找)

1.综述

QDnsLookup类表示一个DNS查找。

QDnsLookup使用操作系统提供的机制来执行DNS查找。要执行查找,您需要指定名称和类型,然后调用lookup()槽。finished()信号将在完成时发出。例如,你可以决定一个XMPP聊天客户端应该连接到哪个服务器为给定的域:

  void MyObject::lookupServers(){// Create a DNS lookup.dns = new QDnsLookup(this);connect(dns, SIGNAL(finished()),this, SLOT(handleServers()));// Find the XMPP servers for gmail.comdns->setType(QDnsLookup::SRV);dns->setName("_xmpp-client._tcp.gmail.com");dns->lookup();}


  
一旦请求完成,你可以用以下方法处理结果:

  void MyObject::handleServers(){// Check the lookup succeeded.if (dns->error() != QDnsLookup::NoError) {qWarning("DNS lookup failed");dns->deleteLater();return;}// Handle the results.const auto records = dns->serviceRecords();for (const QDnsServiceRecord &record : records) {...}dns->deleteLater();}

注意:如果您只是想找到与主机名关联的IP地址,或者与IP地址关联的主机名,那么应该使用QHostInfo。

2.枚举类型

enum QDnsLookup::Error
表示在DNS查找过程中发现的所有可能的错误条件。

ConstantValueDescription
QDnsLookup::NoError0没有错误条件。
QDnsLookup::ResolverError1初始化系统的DNS解析器时出错。
QDnsLookup::OperationCancelledError2使用abort()方法终止了查找。
QDnsLookup::InvalidRequestError3请求的DNS查找无效。
QDnsLookup::InvalidReplyError4服务器返回的应答无效。处理步骤
QDnsLookup::ServerFailureError5服务器在处理请求时遇到内部故障(SERVFAIL)。
QDnsLookup::ServerRefusedError6服务器由于安全或策略原因拒绝处理请求(refused)。
QDnsLookup::NotFoundError7请求的域名不存在(NXDOMAIN)。

 

enum QDnsLookup::Type
表示执行DNS查找的类型。

ConstantValueDescription
QDnsLookup::A1IPv4地址记录。
QDnsLookup::AAAA28IPv6地址记录。
QDnsLookup::ANY255任何记录。
QDnsLookup::CNAME5规范的名称记录。
QDnsLookup::MX15邮件交换记录。
QDnsLookup::NS2名称服务器记录。
QDnsLookup::PTR12指针记录。
QDnsLookup::SRV33服务记录。
QDnsLookup::TXT16文本记录。


3.属性

error : const Error
此属性保存DNS查找失败时发生的错误类型或NoError。
访问函数:
Error error() const

通知信号:
void finished()

errorString : const QString
如果DNS查找失败,此属性保存对错误的人类可读的描述。
访问函数:
QString errorString() const

通知信号:
void finished()

name : QString
此属性保存要查找的名称。
注意:名称将使用IDNA进行编码,这意味着它不适合查询与DNS-SD规范兼容的SRV记录。
访问函数:
QString name() const
void setName(const QString &name)

通知信号:
void nameChanged(const QString &name)

nameserver : QHostAddress
此属性保存用于DNS查找的名称服务器。
访问函数:
QHostAddress nameserver() const
void setNameserver(const QHostAddress &nameserver)

通知信号:
void nameserverChanged(const QHostAddress &nameserver)

type : Type
此属性保存DNS查找的类型。
访问函数:
Type type() const
void setType(QDnsLookup::Type)

通知信号:
void typeChanged(Type type)

4.成函数介绍

QDnsLookup::QDnsLookup(QObject *parent = Q_NULLPTR)
构造一个QDnsLookup对象并将父对象设置为父对象。type属性将默认为QDnsLookup::A。

QDnsLookup::QDnsLookup(Type type, const QString &name, QObject *parent = Q_NULLPTR)
为给定的type和name构造一个QDnsLookup对象,并将parent设置为父对象。  

QDnsLookup::QDnsLookup(Type type, const QString &name, const QHostAddress &nameserver, QObject *parent = Q_NULLPTR)
为给定的type、name和nameserver构造一个QDnsLookup对象,并将parent设置为父对象。  
这个函数是在Qt 5.4中引入的。  

QDnsLookup::~QDnsLookup()
析构QDnsLookup对象。  
删除QDnsLookup对象是安全的,即使它没有完成,您也永远不会收到它的结果。  

[slot] void QDnsLookup::abort()
中止DNS查找操作。  
如果查找已经完成,则不执行任何操作。  

QList QDnsLookup::canonicalNameRecords() const
返回与此查找关联的规范名称记录的列表。

[signal] void QDnsLookup::finished()
该信号在应答完成处理后发出。  
注意:属性错误的通知信号。 属性errorString的通知信号。  

QList QDnsLookup::hostAddressRecords() const
返回与此查找关联的主机地址记录列表。

bool QDnsLookup::isFinished() const
返回应答是否已完成或终止。

[slot] void QDnsLookup::lookup()
执行DNS查找。  
finished()信号在完成时发出。  

QList QDnsLookup::mailExchangeRecords() const
返回与此查找关联的邮件交换记录列表。
这些记录是根据RFC 5321排序的,因此,如果您使用它们连接到服务器,您应该按照它们列出的顺序尝试它们。

[signal] void QDnsLookup::nameChanged(const QString &name)
当查找名称更改时,将发出此信号。Name是新的查找名称。
注意:属性名称的通知信号。

QList QDnsLookup::nameServerRecords() const
返回与此查找关联的名称服务器记录列表。

QList QDnsLookup::pointerRecords() const
返回与此查找关联的指针记录列表。

QList QDnsLookup::serviceRecords() const
返回与此查找关联的服务记录列表。
这些记录是根据RFC 2782排序的,因此,如果您使用它们连接到服务器,您应该按照它们列出的顺序尝试它们。

QList QDnsLookup::textRecords() const
返回与此查找关联的文本记录列表。  

[signal] void QDnsLookup::typeChanged(Type type)
当查找类型发生变化时,将发出此信号。 Type是新的查找类型。  
注意:属性类型的通知信号。  


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部