QHostInfo类

QHostInfo类提供了用于主机名查找的静态功能。更多...

头文件 #include <QHostInfo>
CMakefind_package(Qt6 REQUIRED COMPONENTS Network)
target_link_libraries(mytarget PRIVATE Qt6::Network)
qmakeQT += network

注意:此类中所有函数都是可重入的

公共类型

枚举HostInfoError { NoError, HostNotFound, UnknownError }

公共函数

QHostInfo(int id = -1)
QHostInfo(const QHostInfo &other)
QHostInfo(QHostInfo &&other)
~QHostInfo()
QList<QHostAddress>addresses() const
QHostInfo::HostInfoErrorerror() const
QStringerrorString() const
QStringhostName() const
intlookupId() const
voidsetAddresses(const QList<QHostAddress> &addresses)
voidsetError(QHostInfo::HostInfoError error)
voidsetErrorString(const QString &str)
voidsetHostName(const QString &hostName)
voidsetLookupId(int id)
voidswap(QHostInfo &other)
QHostInfo &operator=(const QHostInfo &other)
QHostInfo &operator=(QHostInfo &&other)

静态公共成员

voidabortHostLookup(int id)
QHostInfofromName(const QString &name)
QStringlocalDomainName()
QStringlocalHostName()
intlookupHost(const QString &name, const QObject *receiver, const char *member)
intlookupHost(const QString &name, const QObject *context, Functor functor)
intlookupHost(const QString &name, Functor &&functor)

详细描述

QHostInfo查找与主机名相关联的IP地址(或与IP地址相关联的主机名)。该类提供两个静态方便函数:一个异步工作并发出信号以找到主机,另一个阻塞并返回一个QHostInfo对象。

要异步查找主机的IP地址,请调用 lookupHost() 函数,它接受主机名或IP地址、一个接收器对象和一个槽签名作为参数,并返回一个ID。您可以通过调用带有查找ID的 abortHostLookup() 来取消查找。

示例

// To find the IP address of qt-project.org
QHostInfo::lookupHost("qt-project.org", this, &MyWidget::printResults);

// To find the host name for 4.2.2.1
QHostInfo::lookupHost("4.2.2.1", this, &MyWidget::printResults);

当结果准备好时将调用槽。结果存储在 QHostInfo 对象中。调用 addresses() 获取为主机提供的IP地址列表,并调用 hostName() 获取已查找的主机名。

如果查找失败,error() 将返回发生的错误类型。errorString() 提供了对查找错误的可读描述。

如果您想要阻塞查找,请使用 QHostInfo::fromName() 函数

QHostInfo info = QHostInfo::fromName("qt-project.org");

QHostInfo 通过IDNA和Punycode标准支持国际化域名(IDNs)。

要获取本地主机的名称,请使用静态的 QHostInfo::localHostName() 函数。

QHostInfo 使用操作系统提供的机制进行查找。根据 RFC 6724,无法保证返回所有域名或主机的IP地址。

注意:从Qt 4.6.1开始,QHostInfo在查找DNS时使用多个线程而不是一个专用的DNS线程。这提高了性能,但也将使用 lookupHost() 时与Qt之前版本相比的信号发射顺序更改。

注意:从Qt 4.6.3开始,QHostInfo使用一个小的内部60秒DNS缓存来提高性能。

另请参阅:QAbstractSocketRFC 3492RFC 6724

成员类型文档

枚举 QHostInfo::HostInfoError

此枚举描述了在尝试解析主机名时可能发生的各种错误。

常量描述
QHostInfo::NoError0查找成功。
QHostInfo::HostNotFound1找不到主机的IP地址。
QHostInfo::UnknownError2发生未知错误。

另请参阅:error() 和 setError()。

成员函数文档

[ explicit ] QHostInfo::QHostInfo(int id = -1)

使用查找ID id 构造一个空的宿主信息对象。

另请参阅:lookupId()。

QHostInfo::QHostInfo(const QHostInfo &other)

other 构造一个副本。

[ noexcept ] QHostInfo::QHostInfo(QHostInfo &&other)

other 中移动构造新的 QHostInfo。

注意:移动的源对象 other 将处于部分形成的状态,在这种情况下,唯一有效的操作是销毁和分配新值。

[ noexcept ] QHostInfo::~QHostInfo()

销毁宿主信息对象。

[静态] void QHostInfo::abortHostLookup(int id)

取消具有 ID id 的主机查找,该 ID 由 lookupHost() 返回。

另请参阅 lookupHost() 和 lookupId()。

QList<QHostAddress> QHostInfo::addresses() const

返回与 hostName 关联的 IP 地址列表。此列表可能为空。

示例

QHostInfo info;
...
if (!info.addresses().isEmpty()) {
    QHostAddress address = info.addresses().first();
    // use the first IP address
}

另请参阅 setAddresses(),hostName() 和 error()。

QHostInfo::HostInfoError QHostInfo::error() const

如果在主机名查找失败时返回错误类型;否则返回 NoError

另请参阅 setError() 和 errorString()。

QString QHostInfo::errorString() const

如果在查找失败,此函数返回错误的人类可读描述;否则返回 "未知错误"。

另请参阅 setErrorString() 和 error()。

[静态] QHostInfo QHostInfo::fromName(const QString &name)

查找给定主机 name 的 IP 地址(地址)。函数在查找过程中阻塞,这意味着程序执行将被挂起,直到查找结果准备就绪。将查找结果返回到 QHostInfo 对象中。

如果您将文字 IP 地址传递给 name 而不是主机名,QHostInfo 将搜索 IP 的域名(即,QHostInfo 将执行 反向 查找)。如果成功,返回的 QHostInfo 将包含解析的域名和主机的 IP 地址。

另请参阅 lookupHost()。

QString QHostInfo::hostName() const

返回查找 IP 地址的主机名。

另请参阅 setHostName() 和 localHostName()。

[静态] QString QHostInfo::localDomainName()

返回此机器的 DNS 域名。

注意: DNS 域名与在 Windows 网络中找到的域名名称没有关系。

另请参阅 hostName()。

[静态] QString QHostInfo::localHostName()

返回已配置的机器的主机名,如果有的话。请注意,主机名不保证是全球唯一的,特别是如果它们是自动配置的。

此函数不保证返回的主机名是完全限定域名(FQDN)。对于此,请使用 fromName() 将返回的名称解析为 FQDN。

此函数返回的与 QSysInfo::machineHostName() 相同。

另请参阅 hostName() 和 localDomainName().

[静态] int QHostInfo::lookupHost(const QString &名称, const QObject *接收器, const char *成员)

查找与主机名 名称 相关联的 IP 地址(复数),并返回查找的 ID。当查找结果准备好了,接收器 中的槽或信号 成员 就会被调用,并带有 QHostInfo 对象参数。然后可以检查 QHostInfo 对象以获取查找结果。

查找通过单个函数调用执行,例如

QHostInfo::lookupHost("www.kde.org", this, &MyWidget::lookedUp);

槽的实现打印出查找返回的地址的基本信息,或者在失败时报告错误

void MyWidget::lookedUp(const QHostInfo &host)
{
    if (host.error() != QHostInfo::NoError) {
        qDebug() << "Lookup failed:" << host.errorString();
        return;
    }

    const auto addresses = host.addresses();
    for (const QHostAddress &address : addresses)
        qDebug() << "Found address:" << address.toString();
}

如果你传递一个字面量 IP 地址而不是主机名给 名称QHostInfo 将寻找该 IP 的域名(即,QHostInfo 将执行 反向 查找)。在成功的情况下,结果的 QHostInfo 将包含解析的域名和宿主名的 IP 地址。例如

QHostInfo::lookupHost("4.2.2.1", this, &MyWidget::lookedUp);

注意: 如果你使用 lookupHost() 启动多个请求,无法保证信号发出的顺序。

注意: 在 Qt 6.7 之前的版本中,此函数将 接收器 作为非 const 的 QObject* 来处理。

另请参阅 abortHostLookup(), addresses(), error() 和 fromName().

[静态] 模板 <typename Functor> int QHostInfo::lookupHost(const QString &名称, const QObject *上下文, Functor 函数)

这是一个重载函数。

查找与主机名 名称 相关联的 IP 地址(复数),并返回查找的 ID。当查找结果准备好了,函数 就会被调用,并带有 QHostInfo 对象参数。然后可以检查 QHostInfo 对象以获取查找结果。

如果在查找完成后销毁 上下文函数 将不会被调用。The function 将在 context 的线程中运行。该线程必须有一个运行的 Qt 事件循环。

以下是该函数的另一种签名

lookupHost(const QString &name, const QObject *receiver, PointerToMemberFunction function)

在这种情况下,当查找结果准备好了,接收器 中的槽或信号 function 就会被调用,并带有 QHostInfo 对象参数。然后可以检查 QHostInfo 对象以获取查找结果。

注意: 如果你使用 lookupHost() 启动多个请求,无法保证信号发出的顺序。

另请参阅 abortHostLookup(), addresses(), error() 和 fromName().

[静态] 模板 <typename Functor> int QHostInfo::lookupHost(const QString &名称, Functor &&function)

这是一个重载函数。

查找与主机名 名称 相关联的 IP 地址(复数),并返回查找的 ID。当查找结果准备好了,函数 就会被调用,并带有 QHostInfo 对象参数。然后可以检查 QHostInfo 对象以获取查找结果。

function 将在调用 lookupHost 的线程中运行;该线程必须有一个运行的 Qt 事件循环。

注意: 如果你使用 lookupHost() 启动多个请求,无法保证信号发出的顺序。

另请参阅 abortHostLookup(), addresses(), error() 和 fromName().

int QHostInfo::lookupId() const

返回此查找的 ID。

另请参阅 setLookupId(), abortHostLookup() 和 hostName().

void QHostInfo::setAddresses(const QList<QHostAddress> &addresses)

将此 QHostInfo 中的地址列表设置为 addresses

另请参阅 addresses()。

void QHostInfo::setError(QHostInfo::HostInfoError error)

将此 QHostInfo 的错误类型设置为 error

另请参阅 error() 和 errorString

void QHostInfo::setErrorString(const QString &str)

如果查找失败,将发生的错误的可读描述设置为 str

另请参阅 errorString() 和 setError

void QHostInfo::setHostName(const QString &hostName)

将此 QHostInfo 的主机名设置为 hostName

另请参阅 hostName()。

void QHostInfo::setLookupId(int id)

将此查找的 ID 设置为 id

另请参阅 lookupId() 和 lookupHost

[noexcept] void QHostInfo::swap(QHostInfo &other)

交换宿主信息 other 和此宿主信息。此操作非常快且不会失败。

QHostInfo &QHostInfo::operator=(const QHostInfo &other)

other 对象的数据分配到本主机信息对象中,并返回对此对象的引用。

[noexcept] QHostInfo &QHostInfo::operator=(QHostInfo &&other)

移动分配 other 到此 QHostInfo 实例。

注意:移动的源对象 other 将处于部分形成的状态,在这种情况下,唯一有效的操作是销毁和分配新值。

© 2024 Qt 公司有限会社。本文档贡献的版权属于其各自的所有者。本文档受 GNU Free Documentation License 版本 1.3 的许可条款约束,由自由软件基金会发布。Qt 和相关的徽标是芬兰以及/或全球的其他国家的 商标,属于 Qt 公司有限会社。所有其他商标均为各自所有者的财产。