QHostAddress Class

QHostAddress 类提供了一个 IP 地址。更多

头文件: #include <QHostAddress>
CMake: find_package(Qt6 REQUIRED COMPONENTS Network)
target_link_libraries(mytarget PRIVATE Qt6::Network)
qmake: QT += network

公共类型

flags ConversionMode
enum ConversionModeFlag { StrictConversion, ConvertV4MappedToIPv4, ConvertV4CompatToIPv4, ConvertLocalHost, ConvertUnspecifiedAddress, TolerantConversion }
enum SpecialAddress { Null, LocalHost, LocalHostIPv6, Broadcast, AnyIPv4, …, Any }

公共函数

QHostAddress()
QHostAddress(QHostAddress::SpecialAddress address)
QHostAddress(const QString &address)
QHostAddress(const Q_IPV6ADDR &ip6Addr)
QHostAddress(const quint8 *ip6Addr)
QHostAddress(const sockaddr *sockaddr)
QHostAddress(quint32 ip4Addr)
QHostAddress(const QHostAddress &address)
(since 6.8) QHostAddress(QHostAddress &&other)
~QHostAddress()
void clear()
bool isBroadcast() const
bool isEqual(const QHostAddress &other, QHostAddress::ConversionMode mode = TolerantConversion) const
bool isGlobal() const
bool isInSubnet(const QHostAddress &subnet, int netmask) const
bool isInSubnet(const std::pair<QHostAddress, int> &subnet) const
bool isLinkLocal() const
bool isLoopback() const
bool isMulticast() const
bool isNull() const
(since 6.6) bool isPrivateUse() const
bool isSiteLocal() const
bool isUniqueLocalUnicast() const
int protocol() const
QString scopeId() const
void setAddress(quint32 ip4Addr)
void setAddress(QHostAddress::SpecialAddress address)
bool setAddress(const QString &address)
void setAddress(const Q_IPV6ADDR &ip6Addr)
void setAddress(const quint8 *ip6Addr)
void setAddress(const sockaddr *sockaddr)
void setScopeId(const QString &id)
void swap(QHostAddress &other)
quint32 toIPv4Address(bool *ok = nullptr) const
Q_IPV6ADDR toIPv6Address() const
QString toString() const
bool operator!=(QHostAddress::SpecialAddress other) const
bool operator!=(const QHostAddress &other) const
QHostAddress &operator=(QHostAddress::SpecialAddress address)
QHostAddress &operator=(const QHostAddress &address)
bool operator==(QHostAddress::SpecialAddress other) const
bool operator==(const QHostAddress &other) const

静态公共成员

std::pair<QHostAddress, int> parseSubnet(const QString &subnet)
size_t qHash(const QHostAddress &key, size_t seed = 0)
bool operator!=(QHostAddress::SpecialAddress lhs, const QHostAddress &rhs)
QDataStream &operator<<(QDataStream &out, const QHostAddress &address)
bool operator==(QHostAddress::SpecialAddress lhs, const QHostAddress &rhs)
QDataStream &operator>>(QDataStream &in, QHostAddress &address)

详细说明

该类以与平台和协议无关的方式保存一个 IPv4 或 IPv6 地址。

QHostAddress 通常与QTcpSocketQTcpServerQUdpSocket 一起用于连接主机或设置服务器。

主机地址用setAddress() 设置,用toIPv4Address() 、toIPv6Address() 或toString() 获取。您可以使用protocol() 检查类型。

注意: 请注意,QHostAddress 不进行 DNS 查询。需要使用QHostInfo 进行 DNS 查询。

该类还支持常见的预定义地址:Null,LocalHost,LocalHostIPv6,Broadcast, 和Any

另请参阅 QHostInfo,QTcpSocket,QTcpServerQUdpSocket

成员类型文档

枚举 QHostAddress::ConversionModeFlag
flags QHostAddress::ConversionMode

常量说明
QHostAddress::StrictConversion0在比较两个不同协议的QHostAddress 对象时,不将 IPv6 地址转换为 IPv4 地址,因此它们将始终被视为不同的地址。
QHostAddress::ConvertV4MappedToIPv41比较时转换 IPv4 映射的 IPv6 地址(RFC 4291 第 2.5.5.2 节)。因此,QHostAddress ("::fffff:192.168.1.1")将与QHostAddress ("192.168.1.1")进行比较。
QHostAddress::ConvertV4CompatToIPv42比较时转换 IPv4 兼容的 IPv6 地址(RFC 4291 第 2.5.5.1 节)。因此,QHostAddress ("::192.168.1.1")将与QHostAddress ("192.168.1.1")进行比较。
QHostAddress::ConvertLocalHost8比较时,将 IPv6 环回地址转换为 IPv4 对应地址。因此,例如QHostAddress ("::1")将等于QHostAddress ("127.0.0.1")。
QHostAddress::ConvertUnspecifiedAddress4所有未指定的地址都将进行比较,即AnyIPv4AnyIPv6 和 Any。
QHostAddress::TolerantConversion0xff设置前面三个标志。

ConversionMode 类型是QFlags<ConversionModeFlag> 的类型定义。它存储 ConversionModeFlag 值的 OR 组合。

另请参见 isEqual().

enum QHostAddress::SpecialAddress

常数描述
QHostAddress::Null0空地址对象。等同于QHostAddress()。另请参阅QHostAddress::isNull().
QHostAddress::LocalHost2IPv4 localhost 地址。等同于QHostAddress ("127.0.0.1")。
QHostAddress::LocalHostIPv63IPv6 localhost 地址。等同于QHostAddress ("::1")。
QHostAddress::Broadcast1IPv4 广播地址。等同于QHostAddress ("255.255.255.255")。
QHostAddress::AnyIPv46IPv4 任意地址。等同于QHostAddress ("0.0.0.0.0")。使用该地址绑定的套接字只能监听 IPv4 接口。
QHostAddress::AnyIPv65IPv6 任意地址。等同于QHostAddress ("::")。使用该地址绑定的套接字只能在 IPv6 接口上监听。
QHostAddress::Any4双协议栈任意地址。使用此地址绑定的套接字将同时监听 IPv4 和 IPv6 接口。

成员函数文档

QHostAddress::QHostAddress()

构造一个空主机地址对象,即一个对任何主机或接口都无效的地址。

另请参见 clear()。

QHostAddress::QHostAddress(QHostAddress::SpecialAddress address)

address 构建一个 QHostAddress 对象。

[explicit] QHostAddress::QHostAddress(const QString &address)

根据字符串address (如 "127.0.0.1")构建 IPv4 或 IPv6 地址。

另请参阅 setAddress().

[explicit] QHostAddress::QHostAddress(const Q_IPV6ADDR &ip6Addr)

使用 IPv6 地址ip6Addr 构建主机地址对象。

[explicit] QHostAddress::QHostAddress(const quint8 *ip6Addr)

使用 IPv6 地址ip6Addr 构建主机地址对象。

ip6Addr 必须是一个 16 字节数组,按网络字节序排列(big endian)。

[explicit] QHostAddress::QHostAddress(const sockaddr *sockaddr)

使用本机结构sockaddr 指定的地址构建 IPv4 或 IPv6 地址。

另请参见 setAddress().

[explicit] QHostAddress::QHostAddress(quint32 ip4Addr)

使用 IPv4 地址ip4Addr 构建主机地址对象。

QHostAddress::QHostAddress(const QHostAddress &address)

构建给定address 的副本。

[noexcept, since 6.8] QHostAddress::QHostAddress(QHostAddress &&other)

移动--从other 构建一个新的 QHostAddress。

注意: moved-from 对象other 处于部分形成状态,其中唯一有效的操作是销毁和分配新值。

此函数在 Qt 6.8 中引入。

[noexcept] QHostAddress::~QHostAddress()

销毁主机地址对象。

void QHostAddress::clear()

将主机地址设置为空,并将协议设置为QAbstractSocket::UnknownNetworkLayerProtocol

另请参阅 QHostAddress::Null

bool QHostAddress::isBroadcast() const

如果地址是 IPv4 广播地址,则返回true ,否则返回false 。IPv4 广播地址为 255.255.255.255。

请注意,对于 IPv4 网络的本地广播地址,此函数不会返回 true。为此,请使用QNetworkInterface 获取本地机器的广播地址。

另请参阅 isLoopback()、isGlobal()、isMulticast()、isLinkLocal()、isUniqueLocalUnicast() 和isPrivateUse()。

bool QHostAddress::isEqual(const QHostAddress &other, QHostAddress::ConversionMode mode = TolerantConversion) const

如果该主机地址与所给的other 地址相同,则返回true ;否则返回false

参数mode 控制不同协议地址之间的转换。如果没有给出mode ,则默认执行TolerantConversion

另请参阅 ConversionModeoperator==()。

bool QHostAddress::isGlobal() const

如果地址是 IPv4 或 IPv6 全局地址,则返回true ,否则返回false 。全局地址是指未保留用于特殊目的(如环回或组播)或未来目的的地址。

请注意,IPv6 唯一本地单播地址被视为全局地址(见isUniqueLocalUnicast() ),RFC 1918 为本地网络保留的 IPv4 地址也被视为全局地址。

另请注意,IPv6 站点本地地址已被弃用,在新应用中应视为全局地址。对于站点本地地址,该函数也返回 true。

另请参阅 isLoopback()、isSiteLocal()、isUniqueLocalUnicast() 和isPrivateUse()。

bool QHostAddress::isInSubnet(const QHostAddress &subnet, int netmask) const

如果该 IP 位于网络前缀subnet 和掩码netmask 所描述的子网中,则返回true

如果一个 IP 位于一个子网的最低地址和最高地址之间,则认为该 IP 属于该子网。在第 4 版 IP 中,最低地址是网络地址,最高地址是广播地址。

subnet 参数不一定是实际的网络地址(子网中的最低地址)。它可以是属于该子网的任何有效 IP。特别是,如果它等于此对象所持有的 IP 地址,则此函数将始终返回 true(前提是 netmask 是有效值)。

另请参见 parseSubnet()。

bool QHostAddress::isInSubnet(const std::pair<QHostAddress, int> &subnet) const

这是一个重载函数。

如果该 IP 位于subnet 所描述的子网中,则返回truesubnetQHostAddress 成员包含网络前缀,int(第二个)成员包含掩码(前缀长度)。

bool QHostAddress::isLinkLocal() const

如果地址是 IPv4 或 IPv6 链路本地地址,则返回true ,否则返回false

IPv4 链路本地地址是指 169.254.0.0/16 网络中的地址。IPv6 链路本地地址是指 fe80::/10 网络中的地址。更多信息,请参阅IANA IPv6 地址空间注册表。

另请参阅 isLoopback()、isGlobal()、isMulticast()、isSiteLocal()、isUniqueLocalUnicast() 和isPrivateUse()。

bool QHostAddress::isLoopback() const

如果地址是 IPv6 环回地址或任何 IPv4 环回地址,则返回true

bool QHostAddress::isMulticast() const

如果地址是 IPv4 或 IPv6 组播地址,则返回true ,否则返回false

另请参阅 isLoopback()、isGlobal()、isLinkLocal()、isSiteLocal()、isUniqueLocalUnicast() 和isPrivateUse()。

bool QHostAddress::isNull() const

如果该主机地址对任何主机或接口无效,则返回true

默认构造函数创建的地址为空。

另请参阅 QHostAddress::Null

[since 6.6] bool QHostAddress::isPrivateUse() const

如果地址是 IPv6 唯一本地单播地址或RFC 1918 为本地网络保留的 IPv4 地址,则返回true ;否则返回false

此函数在 Qt 6.6 中引入。

另请参阅 isLoopback()、isGlobal()、isMulticast()、isLinkLocal()、isUniqueLocalUnicast() 和isBroadcast()。

bool QHostAddress::isSiteLocal() const

如果地址是 IPv6 站点本地地址,则返回true ,否则返回false

IPv6 站点本地地址是指网络 fec0::/10。更多信息请参阅IANA IPv6 地址空间注册表。

IPv6 站点本地地址已被弃用,新应用程序不应依赖该地址。新应用程序不应依赖该函数,而应将站点本地地址视为与全局地址相同的地址(这也是isGlobal() 返回 true 的原因)。站点本地地址已被唯一本地地址 (ULA) 取代。

另请参阅 isLoopback()、isGlobal()、isMulticast()、isLinkLocal()、isUniqueLocalUnicast() 和isPrivateUse()。

bool QHostAddress::isUniqueLocalUnicast() const

如果地址是 IPv6 唯一本地单播地址,则返回true ,否则返回false

IPv6 唯一本地单播地址是指网络 fc00::/7。更多信息,请参阅IANA IPv6 地址空间注册表。

请注意,唯一本地单播地址也算作全局地址。RFC 4193 指出,在实际应用中,"应用程序可将这些地址视为全局地址"。只有路由器才需要注意这种区别。

另请参阅 isLoopback()、isGlobal()、isMulticast()、isLinkLocal()、isUniqueLocalUnicast() 和isPrivateUse()。

[static] std::pair<QHostAddress, int> QHostAddress::parseSubnet(const QString &subnet)

解析subnet 中包含的 IP 和子网信息,并返回该网络的网络前缀及其前缀长度。

IP 地址和子网掩码必须用斜线 (/) 分隔。

该函数支持以下形式的参数

  • 123.123.123.123/n 其中 n 为 0 至 32 之间的任意值
  • 123.123.123.123/255.255.255.255
  • <ipv6-address>/n 其中 n 为 0 到 128 之间的任意值

对于第 4 版 IP,该函数也接受缺失的尾部组件(即少于 4 个八位位组,如 "192.168.1"),无论其后是否有点。如果在这种情况下 netmask 也缺失,它将被设置为实际传递的八位字节数(在上面的例子中,它将是 24,即 3 个八位字节)。

另请参见 isInSubnet()。

int QHostAddress::protocol() const

返回主机地址的网络层协议。

QString QHostAddress::scopeId() const

返回 IPv6 地址的作用域 ID。对于 IPv4 地址,或如果地址不包含作用域 ID,则返回空QString

IPv6 作用域 ID 指定了非全局 IPv6 地址的可达性范围,限制了地址使用的区域。所有 IPv6 地址都与这种可达范围相关联。范围 ID 用于消除不能保证全球唯一的地址的歧义。

IPv6 规定了以下四种级别的可达性:

  • 节点本地:仅用于与同一接口上的服务通信的地址(如环回接口"::1")。
  • 链路本地地址:网络接口(链路)的本地地址。主机上的每个 IPv6 接口总有一个链路本地地址。链路本地地址("fe80...")由本地网络适配器的 MAC 地址生成,不保证唯一。
  • 全局地址:用于全局可路由地址,如互联网上的公共服务器。

在 IPv6 连接中使用链路本地或站点本地地址时,必须指定作用域 ID。链路本地地址的作用域 ID 通常与接口名称(如 "eth0"、"en1")或编号(如 "1"、"2")相同。

另请参阅 setScopeId()、QNetworkInterfaceQNetworkInterface::interfaceFromName

void QHostAddress::setAddress(quint32 ip4Addr)

设置ip4Addr 指定的 IPv4 地址。

void QHostAddress::setAddress(QHostAddress::SpecialAddress address)

这是一个重载函数。

设置address 指定的特殊地址。

bool QHostAddress::setAddress(const QString &address)

这是一个重载函数。

设置由address 指定的字符串表示法(例如 "127.0.0.1")指定的 IPv4 或 IPv6 地址。如果地址解析成功,则返回true 并设置地址;否则返回false

void QHostAddress::setAddress(const Q_IPV6ADDR &ip6Addr)

这是一个重载函数。

设置ip6Addr 指定的 IPv6 地址。

void QHostAddress::setAddress(const quint8 *ip6Addr)

这是一个重载函数。

设置ip6Addr 指定的 IPv6 地址。

ip6Addr 必须是一个按网络字节顺序(高序字节在前)排列的 16 字节数组。

void QHostAddress::setAddress(const sockaddr *sockaddr)

这是一个重载函数。

设置由本地结构sockaddr 指定的 IPv4 或 IPv6 地址。如果地址解析成功,则返回true 并设置地址;否则返回false

void QHostAddress::setScopeId(const QString &id)

将地址的 IPv6 作用域 ID 设置为id 。如果地址协议不是 IPv6,则此函数不会执行任何操作。作用域 ID 可以设置为接口名称(如 "eth0 "或 "en1"),也可以设置为代表接口索引的整数。如果id 是接口名称,则QtNetwork 将在调用操作系统网络函数前使用QNetworkInterface::interfaceIndexFromName() 转换为接口索引。

另请参阅 scopeId()、QNetworkInterfaceQNetworkInterface::interfaceFromName

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

将此主机地址与other 互换。该操作速度非常快,从未出现过故障。

quint32 QHostAddress::toIPv4Address(bool *ok = nullptr) const

以数字形式返回 IPv4 地址。

例如,如果地址为 127.0.0.1,则返回值为 2130706433(即 0x7f000001)。

如果protocol() 是IPv4Protocol ,或协议是IPv6Protocol ,且 IPv6 地址是 IPv4 映射地址 (RFC4291),则此值有效。在这些情况下,ok 将被设置为 true。否则,将设为 false。

另请参阅 toString() 。

Q_IPV6ADDR QHostAddress::toIPv6Address() const

以 Q_IPV6ADDR 结构形式返回 IPv6 地址。该结构由 16 个无符号字符组成。

Q_IPV6ADDR addr = hostAddr.toIPv6Address();
// addr contains 16 unsigned characters

for (int i = 0; i < 16; ++i) {
    // process addr[i]
}

如果protocol() 是IPv6Protocol ,则此值有效。如果协议是IPv4Protocol ,则地址将作为 IPv4 映射 IPv6 地址返回。(RFC4291)

另请参阅 toString() 。

QString QHostAddress::toString() const

以字符串形式返回地址。

例如,如果地址是 IPv4 地址 127.0.0.1,返回的字符串就是 "127.0.0.1"。对于 IPv6,字符串格式将遵循 RFC5952 建议。对于QHostAddress::Any ,将返回其 IPv4 地址("0.0.0.0")。

另请参见 toIPv4Address()。

bool QHostAddress::operator!=(QHostAddress::SpecialAddress other) const

如果该主机地址与所给的other 地址不相同,则返回true ;否则返回false

bool QHostAddress::operator!=(const QHostAddress &other) const

如果该主机地址与所给的other 地址不相同,则返回true ;否则返回false

QHostAddress &QHostAddress::operator=(QHostAddress::SpecialAddress address)

为该对象分配特殊地址address ,并返回该对象的引用。

另请参见 setAddress()。

QHostAddress &QHostAddress::operator=(const QHostAddress &address)

将另一个主机address 分配给此对象,并返回此对象的引用。

bool QHostAddress::operator==(QHostAddress::SpecialAddress other) const

如果该主机地址与所给的other 地址相同,则返回true ;否则返回false

bool QHostAddress::operator==(const QHostAddress &other) const

如果该主机地址与所给的other 地址相同,则返回true ;否则返回false 。此操作符只是调用isEqual (其他,StrictConversion )。

另请参阅 isEqual() 。

相关非会员

[noexcept] size_t qHash(const QHostAddress &key, size_t seed = 0)

返回key 的哈希值,使用seed 作为计算的种子。

bool operator!=(QHostAddress::SpecialAddress lhs, const QHostAddress &rhs)

如果特殊地址lhs 与主机地址rhs 相同,则返回false ;否则返回true

另请参阅 isEqual() 。

QDataStream &operator<<(QDataStream &out, const QHostAddress &address)

将主机地址address 写入数据流out ,并返回该数据流的引用。

另请参阅 序列化 Qt 数据类型

bool operator==(QHostAddress::SpecialAddress lhs, const QHostAddress &rhs)

如果特殊地址lhs 与主机地址rhs 相同,则返回true ;否则返回false

另请参阅 isEqual() 。

QDataStream &operator>>(QDataStream &in, QHostAddress &address)

从数据流in 将主机地址读入address ,并返回对数据流的引用。

另请参阅 序列化 Qt 数据类型

© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.