Qt4.7.0文档翻译:QHostInfo类参考,QHostInfo Class Reference

< ?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">
- no title specified

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 缓存来提高性能

参见QAbstractSocketRFC 3492