【QHostAddress】

一、描述

  • QHostAddress类提供一个IP地址。该类以独立于平台和协议的方式保存IPv4或IPv6地址。QHostAddress通常与QTcpSocketQTcpServerQTcpServer和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广播地址为255255. 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")
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值