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查找过程中发现的所有可能的错误条件。
| Constant | Value | Description |
| QDnsLookup::NoError | 0 | 没有错误条件。 |
| QDnsLookup::ResolverError | 1 | 初始化系统的DNS解析器时出错。 |
| QDnsLookup::OperationCancelledError | 2 | 使用abort()方法终止了查找。 |
| QDnsLookup::InvalidRequestError | 3 | 请求的DNS查找无效。 |
| QDnsLookup::InvalidReplyError | 4 | 服务器返回的应答无效。处理步骤 |
| QDnsLookup::ServerFailureError | 5 | 服务器在处理请求时遇到内部故障(SERVFAIL)。 |
| QDnsLookup::ServerRefusedError | 6 | 服务器由于安全或策略原因拒绝处理请求(refused)。 |
| QDnsLookup::NotFoundError | 7 | 请求的域名不存在(NXDOMAIN)。 |
enum QDnsLookup::Type
表示执行DNS查找的类型。
| Constant | Value | Description |
| QDnsLookup::A | 1 | IPv4地址记录。 |
| QDnsLookup::AAAA | 28 | IPv6地址记录。 |
| QDnsLookup::ANY | 255 | 任何记录。 |
| QDnsLookup::CNAME | 5 | 规范的名称记录。 |
| QDnsLookup::MX | 15 | 邮件交换记录。 |
| QDnsLookup::NS | 2 | 名称服务器记录。 |
| QDnsLookup::PTR | 12 | 指针记录。 |
| QDnsLookup::SRV | 33 | 服务记录。 |
| QDnsLookup::TXT | 16 | 文本记录。 |
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
返回与此查找关联的规范名称记录的列表。
[signal] void QDnsLookup::finished()
该信号在应答完成处理后发出。
注意:属性错误的通知信号。 属性errorString的通知信号。
QList
返回与此查找关联的主机地址记录列表。
bool QDnsLookup::isFinished() const
返回应答是否已完成或终止。
[slot] void QDnsLookup::lookup()
执行DNS查找。
finished()信号在完成时发出。
QList
返回与此查找关联的邮件交换记录列表。
这些记录是根据RFC 5321排序的,因此,如果您使用它们连接到服务器,您应该按照它们列出的顺序尝试它们。
[signal] void QDnsLookup::nameChanged(const QString &name)
当查找名称更改时,将发出此信号。Name是新的查找名称。
注意:属性名称的通知信号。
QList
返回与此查找关联的名称服务器记录列表。
QList
返回与此查找关联的指针记录列表。
QList
返回与此查找关联的服务记录列表。
这些记录是根据RFC 2782排序的,因此,如果您使用它们连接到服务器,您应该按照它们列出的顺序尝试它们。
QList
返回与此查找关联的文本记录列表。
[signal] void QDnsLookup::typeChanged(Type type)
当查找类型发生变化时,将发出此信号。 Type是新的查找类型。
注意:属性类型的通知信号。
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
