QHostAddress 类
QHostAddress 类提供 IP 地址。 更多...
头文件 | #include <QHostAddress> |
CMake | find_package(Qt6 REQUIRED COMPONENTS Network) target_link_libraries(mytarget PRIVATE Qt6::Network) |
qmake | QT += network |
- 所有成员列表,包括继承成员
- QHostAddress 是网络编程 API 的一部分 Network Programming API 以及 隐式共享类。
公共类型
标志 | 转换模式 |
枚举 | ConversionModeFlag { 严格转换, 转换 V4Mapped 到 IPv4, 转换 V4Compat 到 IPv4, 转换本机, 转换未指定地址, 容忍转换 } |
枚举 | SpecialAddress { 空值, 本机, 本机 IPv6, 广播, 任何 IPv4, …, 任何 } |
公共函数
QHostAddress() | |
QHostAddress(quint32 ip4Addr) | |
QHostAddress(const quint8 *ip6Addr) | |
QHostAddress(const Q_IPV6ADDR &ip6Addr) | |
QHostAddress(const sockaddr *sockaddr) | |
QHostAddress(const QString &address) | |
QHostAddress(QHostAddress::SpecialAddress address) | |
QHostAddress(const QHostAddress &address) | |
~QHostAddress() | |
void | 清晰() |
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 QPair<QHostAddress, int> &subnet) const |
bool | isLinkLocal() const |
bool | isLoopback() const |
bool | isMulticast() const |
bool | isNull() const |
(自 6.6) bool | isPrivateUse() const |
bool | isSiteLocal() const |
bool | isUniqueLocalUnicast() const |
int | protocol() const |
QString | scopeId() const |
void | setAddress(quint32 ip4Addr) |
void | setAddress(const quint8 *ip6Addr) |
void | setAddress(const Q_IPV6ADDR &ip6Addr) |
void | setAddress(const sockaddr *sockaddr) |
bool | setAddress(const QString &address) |
void | setAddress(QHostAddress::SpecialAddress address) |
void | setScopeId(const QString &id) |
void | swap(QHostAddress &other) |
quint32 | toIPv4Address(bool *ok = nullptr) const |
Q_IPV6ADDR | toIPv6Address() const |
QString | toString() const |
bool | operator!=(const QHostAddress &other) const |
bool | operator!=(QHostAddress::SpecialAddress other) const |
QHostAddress & | operator=(const QHostAddress &address) |
QHostAddress & | operator=(QHostAddress::SpecialAddress address) |
bool | operator==(const QHostAddress &other) const |
bool | operator==(QHostAddress::SpecialAddress other) const |
静态公共成员
QPair<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通常与QTcpSocket,QTcpServer和QUdpSocket一起使用,以连接到主机或设置服务器。
使用setAddress()设置主机的地址,并使用toIPv4Address(),toIPv6Address()或toString()检索地址。您可以使用protocol()检查类型。
注意:请注意,QHostAddress不会执行DNS查找。需要QHostInfo进行此操作。
该类还支持常见的预定义地址:Null,LocalHost,LocalHostIPv6,Broadcast和Any。
另请参阅:QHostInfo、QTcpSocket、QTcpServer和QUdpSocket。
成员类型文档
枚举 QHostAddress::ConversionModeFlag
标志 QHostAddress::ConversionMode
常量 | 值 | 描述 |
---|---|---|
QHostAddress::StrictConversion | 0 | 比较不同协议的QHostAddress对象时,不要将IPv6地址转换为IPv4,因此它们始终被视为不同。 |
QHostAddress::ConvertV4MappedToIPv4 | 1 | 比较时转换IPv4映射的IPv6地址(RFC 4291第2.5.5.2节)。因此,QHostAddress("::ffff:192.168.1.1")将与QHostAddress("192.168.1.1")比较相等。 |
QHostAddress::ConvertV4CompatToIPv4 | 2 | 比较时转换IPv4兼容的IPv6地址(RFC 4291第2.5.5.1节)。因此,QHostAddress("::192.168.1.1")将与QHostAddress("192.168.1.1")比较相等。 |
QHostAddress::ConvertLocalHost | 8 | 比较时将IPv6回环地址转换为它的IPv4等效地址。例如,QHostAddress("::1")将与QHostAddress("127.0.0.1")比较相等。 |
QHostAddress::ConvertUnspecifiedAddress | 4 | 所有未指定地址都将比较相等,即AnyIPv4、AnyIPv6和Any。 |
QHostAddress::TolerantConversion | 0xff | 设置前面三个标志。 |
ConversionMode类型是QFlags<ConversionModeFlag>的typedef。它存储了ConversionModeFlag值的或组合。
另请参阅isEqual()。
枚举QHostAddress::SpecialAddress
常量 | 值 | 描述 |
---|---|---|
QHostAddress::Null | 0 | 空地址对象。等同于QHostAddress()。另请参阅QHostAddress::isNull。 |
QHostAddress::LocalHost | 2 | IPv4localhost地址。等同于QHostAddress("127.0.0.1")。 |
QHostAddress::LocalHostIPv6 | 3 | IPv6localhost地址。等同于QHostAddress("::1")。 |
QHostAddress::Broadcast | 1 | IPv4广播地址。等同于QHostAddress("255.255.255.255")。 |
QHostAddress::AnyIPv4 | 6 | IPv4任何地址。等同于QHostAddress("0.0.0.0")。使用此地址绑定的套接字将只监听IPv4接口。 |
QHostAddress::AnyIPv6 | 5 | IPv6任何地址。等同于QHostAddress("::")。使用此地址绑定的套接字将只监听IPv6接口。 |
QHostAddress::Any | 4 | 双栈任何地址。使用此地址绑定的套接字将监听IPv4和IPv6接口。 |
成员函数文档
QHostAddress::QHostAddress()
构造一个空的主机地址对象,即对于任何主机或接口都无效的地址。
另请参阅clear。
[显式]
QHostAddress::QHostAddress(quint32 ip4Addr)
使用IPv4地址ip4Addr构造主机地址对象。
[显式]
QHostAddress::QHostAddress(const quint8 *ip6Addr)
使用IPv6地址ip6Addr构造主机地址对象。
ip6Addr必须是一个网络字节顺序(大端)的16字节数组。
[显式]
QHostAddress::QHostAddress(const Q_IPV6ADDR &ip6Addr)
使用IPv6地址ip6Addr构造主机地址对象。
[显式]
QHostAddress::QHostAddress(const sockaddr *sockaddr)
使用本地结构体 sockaddr 指定地址构建IPv4或IPv6地址。
另请参阅 setAddress。
[明确]
QHostAddress::QHostAddress(const QString &address)
根据字符串 address (例如,"127.0.0.1") 构建IPv4或IPv6地址。
另请参阅 setAddress。
QHostAddress::QHostAddress(QHostAddress::SpecialAddress address)
为 address 构建一个 QHostAddress 对象。
QHostAddress::QHostAddress(const QHostAddress &address)
构建给定 address 的副本。
[不可抛出异常]
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
。
另请参阅 ConversionMode 和 operator==。
bool QHostAddress::isGlobal() const
如果该地址是IPv4或IPv6全局地址,则返回 true
,否则返回 false
。全局地址是不为特殊目的(如环回或组播)或未来目的保留的地址。
请注意,IPv6唯一本地unicast地址被视为全局地址(参见 isUniqueLocalUnicast),同样,IPv4地址由 RFC 1918 保留以用于本地网络,也被视为全局地址。
还请注意,IPv6站点本地地址已弃用,应在新的应用程序中视为全局地址。此函数也为站点本地地址返回true。
另请参阅 isLoopback(),isSiteLocal(),isUniqueLocalUnicast(),以及 isPrivateUse()。
bool QHostAddress::isInSubnet(const QHostAddress &subnet, int netmask) const
如果此IP地址在由网络前缀subnet和子网掩码netmask描述的子网中,则返回true
。
如果IP地址位于该子网最低地址和最高地址之间,则认为它属于该子网。在IPv4版本中,最低地址是网络地址,而最高地址是广播地址。
参数subnet不必须是实际的网络地址(子网中的最低地址)。它可以属于该子网的任何有效IP。特别是,如果它等于该对象持有的IP地址,则此函数将始终返回true
(前提是子网掩码是有效值)。
另请参阅 parseSubnet。
bool QHostAddress::isInSubnet(const QPair<QHostAddress, int> &subnet) const
这是一个重载函数。
如果此IP地址在由subnet描述的子网中,则返回true
。子网subnet的QHostAddress成员包含网络前缀,而int(第二个)成员包含子网掩码(前缀长度)。
bool QHostAddress::isLinkLocal() const
如果地址是IPv4或IPv6链路本地地址,则返回true
;否则返回false
。
IPv4链路本地地址是169.254.0.0/16网络中的地址。IPv6链路本地地址是fe80::/10网络中的地址。有关更多信息,请参阅IANA IPv6地址空间注册表。
另请参阅 isLoopback(),isGlobal(),isMulticast(),isSiteLocal(),isUniqueLocalUnicastisPrivateUse()。
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。
[自6.6版本起]
bool QHostAddress::isPrivateUse() const
如果地址是IPv6唯一本地单播地址或IPv4地址(由RFC 1918保留供本地网络使用),则返回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()。
[静态]
QPair<QHostAddress, int> QHostAddress::parseSubnet(const QString &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之间的任何值
对于IP版本4,此函数还接受缺少尾随组件的参数(即小于4个八位的字节,如"192.168.1"),后面可以跟或不跟点。如果在此情况下子网掩码也缺失,则其数值设置为实际传递的八位的数量(在上面的示例中,它将是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(),QNetworkInterface,以及QNetworkInterface::interfaceFromName。
void QHostAddress::setAddress(quint32 ip4Addr)
设置由ip4Addr指定的IPv4地址。
void QHostAddress::setAddress(const quint8 *ip6Addr)
这是一个重载函数。
设置由ip6Addr指定的IPv6地址。
ip6Addr必须是一个以网络字节顺序(高字节在前)排列的16字节数组。
void QHostAddress::setAddress(const Q_IPV6ADDR &ip6Addr)
这是一个重载函数。
设置由ip6Addr指定的IPv6地址。
void QHostAddress::setAddress(const sockaddr *sockaddr)
这是一个重载函数。
根据本地结构sockaddr设置IPv4或IPv6地址。如果地址解析成功,则返回true
并设置地址;否则返回false
。
bool QHostAddress::setAddress(const QString &address)
这是一个重载函数。
根据字符串表示形式指定的address设置IPv4或IPv6地址(例如,“127.0.0.1”)。如果地址解析成功,则返回true
并设置地址;否则返回false
。
void QHostAddress::setAddress(QHostAddress::SpecialAddress address)
这是一个重载函数。
设置address指定的特殊地址。
void QHostAddress::setScopeId(const QString &id)
将地址的IPv6范围ID设置为id。如果地址协议不是IPv6,此函数不执行任何操作。范围ID可以设置为接口名称(如“eth0”或“en1”)或表示接口索引的整数。如果id是接口名称,QtNetwork将在调用操作系统网络功能之前使用QNetworkInterface::interfaceIndexFromName()将之转换为接口索引。
另请参阅scopeId,QNetworkInterface,以及QNetworkInterface::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
将IPv6地址作为Q_IPV6ADDR结构返回。该结构由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!=(const QHostAddress &other) const
如果此主机地址不等于给定的other地址,则返回true
;否则返回false
。
bool QHostAddress::operator!=(QHostAddress::SpecialAddress other) const
如果此主机地址不等于给定的other地址,则返回true
;否则返回false
。
QHostAddress &QHostAddress::operator=(const QHostAddress &address)
将另一个主机address赋给此对象,并返回对此对象的引用。
QHostAddress &QHostAddress::operator=(QHostAddress::SpecialAddress address)
将特殊地址address赋给此对象,并返回对此对象的引用。
另请参阅 setAddress。
bool QHostAddress::operator==(const QHostAddress &other) const
如果此主机地址与提供的其他地址相同,则返回 true
;否则返回 false
。此运算符仅调用 isEqual(other, StrictConversion)。
另请参阅isEqual()。
bool QHostAddress::operator==(QHostAddress::SpecialAddress other) const
如果此主机地址与给定的 other 地址相同,则返回 true
,否则返回 false
。
相关非成员函数
[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 数据类型。
© 2024 The Qt Company Ltd. 本文档中包含的贡献的文档版权属于各自的拥有者。本提供的文档是根据 Free Software Foundation 发布的 GNU Free Documentation License 版本 1.3 的条款许可的。Qt 及其相关标志是芬兰及全球其他地区的 The Qt Company Ltd. 的商标。所有其他商标均为其各自所有者的财产。