< ?xml version="1.0" encoding="UTF-8"?>
< !DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.1 plus MathML 2.0//EN" "http://www.w3.org/TR/MathML2/dtd/xhtml-math11-f.dtd">
Qt4.7.0文档翻译:QHostInfo类参考,QHostInfo Class Reference
QHostInfo类提供用于域名查询的静态函数。
QHostInfo使用操作系统提供的域名查询机制来查询与一个主机名对应的IP 地址(可能有多个)或者与一个IP 地址对应的主机名。这个类提供两个便利性的静态函数:其中一个是异步工作的,找到域名之后就发射一个信号;另一个是同步工作的,将会返回一个QHostInfo 对象。
要想异步地查询一个主机的IP 地址,就调用lookupHost(),它需要的参数是:主机名或者IP 地址、一个接收信号的对象、和一个信号槽名称,它会返回一个ID。你可以用查询ID 作为参数调用abortHostLookup()来终止查询过程。
示例:
// 查询qt.nokia.com的IP 地址
QHostInfo::lookupHost(“qt.nokia.com”,
this, SLOT(printResults(QHostInfo)));
// 查询4.2.2.1的主机名
QHostInfo::lookupHost(“4.2.2.1″,
this, SLOT(printResults(QHostInfo)));
当结果出来了之后,就会调用设定的信号槽。(如果你使用嵌入式Linux 上的Qt 并且通过定义QT_NO_THREAD来禁用了多线程支持,那么lookupHost()将会阻塞,直到查询结束。)结果保存在一个QHostInfo 对象里。调用addresses() 来获取那个主机对应的IP 地址列表,调用hostName()来获取被查询的主机名字。
如果查询失败,error()将会返回发生的错误的类型。errorString()给出对于查询错误的一个肉眼可读的描述。
如果你想使用阻塞的方式来查询,那么就使用QHostInfo::fromName()函数:
QHostInfo info = QHostInfo::fromName(“qt.nokia.com”);
QHostInfo支持符合IDNA 和Punycode 标准的国际化域名(IDNs)。
要获取本机的主机名,就使用静态的QHostInfo::localHostName()函数。
注意:从Qt 4.6.1开始,QHostInfo使用多线程来进行DNS 查询,而不是使用一个单独的DNS 线程。这改善了性能,但是与以前版本的Qt 相比,改变了使用lookupHost()时发射的信号的顺序。注意:从Qt 4.6.3 开始,QHostInfo 使用一个小的60 秒的内部DNS 缓存来提高性能。