QHostAddress各种方法以及用法
- 一、描述
- 二、成员类型
- 三、成员方法
- 1、 bool isBroadcast() const判断地址是否为IPv4广播地址
- 2、 bool isEqual(const QHostAddress &other, QHostAddress::ConversionMode mode = TolerantConversion) const判断主机地址与给定的其他地址是否相同
- 3、 bool isGlobal() const判断地址是否为IPv4或IPv6全局地址
- 4、bool isInSubnet(const QHostAddress &subnet, int netmask) const
- 5、<font color=#dda0>bool isInSubnet(const QPair<QHostAddress, int> &subnet) const
- 6、bool isLinkLocal() const判断地址是否是IPv4或IPv6链路本地地址
- 7、bool isLoopback() const判断地址是否是IPv6环回地址或任何IPv4环回地址
- 8、bool isMulticast() const判断地址是否是IPv4或IPv6组播地址
- 9、bool isNull() const判断地址是否为空
- 10、bool isSiteLocal() const判断地址是否为IPv6站点本地地址
- 11、bool isUniqueLocalUnicast() const判断地址是否为IPv6唯一本地单播地址。
- 12、QAbstractSocket::NetworkLayerProtocol protocol() const
- 13、QString scopeId() const
- 14、void swap(QHostAddress &other)
- 15、quint32 toIPv4Address() const
- 16、Q_IPV6ADDR toIPv6Address() const
- 17、QString toString() const
一、描述
- QHostAddress类提供一个IP地址。该类以独立于平台和协议的方式保存IPv4或IPv6地址。QHostAddress通常与QTcpSocket、QTcpServerQTcpServer和QUdpSocket一起使用,用于连接主机或设置服务器。主机地址用setAddressO设置,用tolPv4Address()、tolPv6Address()或toString()检索。您可以使用protocol()检查类型。
注意:请注意,QHostAddress不做DNS查找。为此需要QHostInfo。该类还支持常见的预定义地址:Null、LocalHost、LocalHostIPv6、Broadcast和Any。参见QHostInfo、QTcpSocket、QTcpServer和QUdpSocket。
二、成员类型
1、enum QHostAddress::ConversionModeFlag转换模式
- 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(“::ffff: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,设置前面三个标志。
2、enum QHostAddress::SpecialAddress特殊地址
- QHostAddress::Null对应枚举值:0,null地址对象,相当于QHostAddress()。
- QHostAddress::LocalHost对应枚举值:2,IPv4 localhost地址,相当于QHostAddress(“127.0.0.1”)。
- QHostAddress::LocalHostIPv6对应枚举值:3,IPv6本地主机地址,相当于QHostAddress(“::1”)。
- QHostAddress::Broadcast对应枚举值:1,IPv4广播地址,相当于QHostAddress(“255.255.255.255”)。
- QHostAddress::AnyIPv4对应枚举值:6,IPv4任意地址,等价于QHostAddress(“0.0.0.0”),一个绑定此地址的套接字只能监听IPv4接口。
- QHostAddress::AnyIPv6对应枚举值:5,IPy6任意地址,相当于QHostAddress(“::”),一个套接字绑定此地址的接口只监听IPv6接口。
- QHostAddress::Any对应枚举值:4,双栈任意地址,与此地址绑定的套接字可以在IPv4和IPv6接口上侦听。
三、成员方法
1、 bool isBroadcast() const判断地址是否为IPv4广播地址
bool QHostAddress::isBroadcast() const
如果地址是IPv4广播地址则返回true,否则返回false。
IPv4广播地址为255。255. 255. 255.
注意,对于IPv4网络的本地广播地址,此函数不会返回true。
为此,请使用QNetworkInterface来获取本机的广播地址。
2、 bool isEqual(const QHostAddress &other, QHostAddress::ConversionMode mode = TolerantConversion) const判断主机地址与给定的其他地址是否相同
bool QHostAddress::isEqual(const QHostAddress &other, QHostAddress::ConversionMode mode = TolerantConversion) const
如果此主机地址与给定的其他地址相同,则返回true;否则返回false。
参数模式控制在不同协议的地址之间进行哪些转换。
如果没有指定模式,则默认执行TolerantConversion。
3、 bool isGlobal() const判断地址是否为IPv4或IPv6全局地址
全局地址作为互联网中的唯一地址,用于在互联网上进行路由
bool QHostAddress::isGlobal() const
如果地址是IPv4或IPv6全局地址,则返回true,否则返回false。
全局地址是不为特殊目的(如环回或多播)或将来目的而保留的地址。
请注意,IPv6唯一本地单播地址被认为是全局地址(参见isUniqueLocalUnicast()),正如RFC 1918为本地网络保留的IPv4地址一样。
另外请注意,IPv6站点本地地址已被弃用,在新的应用程序中应将其视为全局地址。这个函数对站点本地地址也返回true。
4、bool isInSubnet(const QHostAddress &subnet, int netmask) const
bool QHostAddress::isInSubnet(const QHostAddress &subnet, int netmask) const
如果此IP在由网络前缀subnet和netmask netmask描述的子网中,则返回true。
如果一个IP地址包含在该子网的最低和最高地址之间,则认为该IP属于该子网。
对于IP版本4,最低的地址是网络地址,最高的地址是广播地址subnet参数不必是实际的网络地址(子网中最低的地址)。它可以是属于该子网的任何有效IP。特别是,如果它等于该对象持有的IP地址,则该函数将始终返回true(前提是netmask是一个有效值)。
5、bool isInSubnet(const QPair<QHostAddress, int> &subnet) const
bool QHostAddress::isInSubnet(const QPair<QHostAddress, int> &subnet) const
这是一个重载函数。
如果此IP在子网描述的子网中,则返回true。
子网的QHostAddress成员包含网络前缀,int (second)成员包含netmask(前缀长度)。
6、bool isLinkLocal() const判断地址是否是IPv4或IPv6链路本地地址
bool QHostAddress::isLinkLocal() const
如果地址是IPv4或IPv6链路本地地址,则返回true,否则返回false。
IPv4链路本地地址为网络169.254.0.0/16中的地址。IPv6链路本地地址为网络fe80::/10中的地址。
请参阅IANA IPv6地址空间注册表了解更多信息。
7、bool isLoopback() const判断地址是否是IPv6环回地址或任何IPv4环回地址
bool QHostAddress::isLoopback() const
如果地址是IPv6环回地址或任何IPv4环回地址,则返回true。
8、bool isMulticast() const判断地址是否是IPv4或IPv6组播地址
bool QHostAddress::isMulticast() const
如果地址是IPv4或IPv6组播地址,则返回true,否则返回false。
9、bool isNull() const判断地址是否为空
bool QHostAddress::isNull() const
如果此主机地址对任何主机或接口都无效,则返回true。
10、bool isSiteLocal() const判断地址是否为IPv6站点本地地址
bool QHostAddress::isSiteLocal() const
如果地址是IPv6站点本地地址则返回true,否则返回false。IPv6站点本地地址为网络fec0::/10中的站点本地地址。
11、bool isUniqueLocalUnicast() const判断地址是否为IPv6唯一本地单播地址。
bool QHostAddress::isUniqueLocalUnicast() const
如果地址是IPv6唯一本地单播地址,则返回true,否则返回false。
IPv6唯一本地单播地址是网络fc00::/7中的一个。
请参阅IANA IPv6地址空间注册表了解更多信息注意,唯一的本地单播地址也算作全局地址。
RFC 4193说,在实践中,“应用程序可以将这些地址视为全局作用域地址。”只有路由器才需要关心这种区别。
12、QAbstractSocket::NetworkLayerProtocol protocol() const
QAbstractSocket::NetworkLayerProtocol QHostAddress::protocol() const
返回主机地址的网络层协议。
13、QString scopeId() const
QString QHostAddress::scopeId() const
返回IPv6地址的作用域ID。
对于IPv4地址,或者如果地址不包含作用域ID,则返回空QString。
IPv6 scope ID指定了非全局IPv6地址的可达范围,限制了该地址可以使用的区域。所有IPv6地址都与这样一个可达范围相关联。范围ID用于消除不保证全局唯一的地址的歧义。
IPv6指定了以下四种级别的可达性:Node-local:仅用于与同一接口上的业务通信的地址(例如,环回接口"::1")。
link -local:网络接口(link)的本地地址。主机上的每个IPv6接口总是有一个链路本地地址。链路本地地址(“fe80…”)是从本地网络适配器的MAC地址生成的,不保证是唯一的。
Global:用于全局可路由的地址,如Internet上的公共服务器。
当使用link-local或site-local地址进行IPv6连接时,必须指定scope ID。链路本地地址的作用域ID通常与接口名称(如“etho”、“enl”)或编号(如“1”、“2”)相同。
14、void swap(QHostAddress &other)
void QHostAddress::swap(QHostAddress &other)
将此主机地址与其他主机地址交换。这个操作非常快,从不失败。
15、quint32 toIPv4Address() const
quint32 QHostAddress::toIPv4Address() const
以数字形式返回IPv4地址。
16、Q_IPV6ADDR toIPv6Address() const
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]
}
17、QString toString() const
QString QHostAddress::toString() const
以字符串形式返回地址。
例如,如果地址是IPv4地址127.0.0.1,则返回的字符串为127.0.0.1。
对于IPv6,字符串格式将遵循RFC5952建议。对于QHostAddress::Any,它的IPv4地址将返回("0.0.0.0")