- class QHostAddress#
类
QHostAddress
提供了一个 IP 地址。更多…概要#
方法#
定义
__init__()
定义
clear()
定义
isEqual()
定义
isGlobal()
定义
isInSubnet()
定义
isLoopback()
定义
isNull()
定义
__ne__()
定义
__eq__()
定义
protocol()
定义
scopeId()
定义
setAddress()
定义
setScopeId()
定义
swap()
定义
toString()
静态函数#
注意
本文档可能包含从 C++ 自动转换为 Python 的代码片段。我们始终欢迎对代码片段翻译的贡献。如果您发现翻译问题,也可以通过在 https:/bugreports.qt.io/projects/PYSIDE 创建工单的方式来告知我们。
详细描述#
此类以平台和协议无关的方式保留 IPv4 或 IPv6 地址。
QHostAddress
通常与QTcpSocket
、QTcpServer
和QUdpSocket
一起使用来连接到主机或设置服务器。使用
setAddress()
设置主机地址,并使用toIPv4Address()
、toIPv6Address()
或toString()
获取地址。您可以使用protocol()
检查类型。注意
请注意,
QHostAddress
不进行 DNS 查询。需要QHostInfo
才能进行。该类还支持常见的预定义地址:
Null
、LocalHost
、LocalHostIPv6
、Broadcast
和Any
。- 类 SpecialAddress#
常量
描述
QHostAddress.Null
空地址对象。等价于
QHostAddress()
。参见isNull()
。QHostAddress.LocalHost
IPv4本机地址。等价于
QHostAddress
("127.0.0.1")。QHostAddress.LocalHostIPv6
IPv6本机地址。等价于
QHostAddress
("::1")。QHostAddress.Broadcast
IPv4广播地址。等价于
QHostAddress
("255.255.255.255")。QHostAddress.AnyIPv4
IPv4任意地址。等价于
QHostAddress
("0.0.0.0")。绑定此地址的套接字仅监听IPv4接口。QHostAddress.AnyIPv6
IPv6任意地址。等价于
QHostAddress
("::")。绑定此地址的套接字仅监听IPv6接口。QHostAddress.Any
双栈任意地址。绑定此地址的套接字将在IPv4和IPv6接口上监听。
- 类 ConversionModeFlag#
常量
描述
QHostAddress.StrictConversion
(继承自
enum.Flag
) 比较不同协议的QHostAddress
对象时,不将IPv6地址转换为IPv4,以便它们始终被认为是不同的。QHostAddress.ConvertV4MappedToIPv4
在比较时转换IPv4映射的IPv6地址(RFC 4291节2.5.5.2)。因此,
QHostAddress
("::ffff:192.168.1.1") 将与QHostAddress
("192.168.1.1") 相等。QHostAddress.ConvertV4CompatToIPv4
在比较时转换IPv4兼容的IPv6地址(RFC 4291节2.5.5.1)。因此,
QHostAddress
("::192.168.1.1") 将与QHostAddress
("192.168.1.1") 相等。QHostAddress.ConvertLocalHost
在比较时将IPv6环回地址转换为其IPv4等效地址。因此,例如,
QHostAddress
(《::1》)将与QHostAddress
(《127.0.0.1》)相等比较。QHostAddress.ConvertUnspecifiedAddress
QHostAddress.TolerantConversion
设置前三个标志。
另请参阅
- PySide6.QtNetwork.QHostAddress.IPv4Protocol#
- PySide6.QtNetwork.QHostAddress.IPv6Protocol#
- PySide6.QtNetwork.QHostAddress.AnyIPProtocol#
- PySide6.QtNetwork.QHostAddress.UnknownNetworkLayerProtocol#
- __init__(address)#
- 参数:
address –
SpecialAddress
为
address
构建一个QHostAddress
对象。- __init__()
构建一个空主机地址对象,即对一个主机或接口无效的地址。
另请参阅
- __init__(ip4Addr)
- 参数:
ip4Addr – int
构建一个带有IPv4地址
ip4Addr
的主机地址对象。- __init__(address)
- 参数:
address – str
根据字符串
address
(例如,“127.0.0.1”)构造IPv4或IPv6地址。另请参阅
- __init__(ip6Addr)
- 参数:
ip6Addr –
QIPv6Address
- __init__(copy)
- 参数:
复制 –
QHostAddress
构造给定地址的副本。
- clear()#
将主机地址设为null,并将协议设置为
UnknownNetworkLayerProtocol
.另请参阅
- isBroadcast()#
- 返回类型:
bool
如果地址是IPv4广播地址,则返回
true
,否则返回false
。IPv4广播地址是255.255.255.255。注意,此函数对于IPv4网络的本地广播地址不返回true。对于这种情况,请使用
QNetworkInterface
获取本地计算机的广播地址。- isEqual(address[, mode=QHostAddress.ConversionModeFlag.TolerantConversion])#
- 参数:
address –
QHostAddress
mode –
ConversionModeFlag
的组合
- 返回类型:
bool
如果此主机地址与给定的其他地址相同,则返回
true
;否则返回false
。mode
参数控制在不同协议的地址之间执行哪些转换。如果没有提供mode
,则默认执行TolerantConversion
。另请参阅
ConversionMode
operator==()
- isGlobal()#
- 返回类型:
bool
如果地址是IPv4或IPv6全局地址,则返回
true
,否则返回false
。全局地址是指不属于特殊用途(如回环或多播)或未来用途的地址。请注意,IPv6唯一本地单播地址被视为全局地址(见
isUniqueLocalUnicast()
),IPv4地址,根据RFC 1918为本地网络保留。还应注意的是,IPv6站点本地地址已被弃用,在新应用程序中应视为全局地址。此函数对站点本地地址也返回true。
- isInSubnet(subnet, netmask)#
- 参数:
subnet –
QHostAddress
netmask – int
- 返回类型:
bool
如果此IP位于由网络前缀
subnet
和子网掩码netmask
描述的子网中,则返回true
IP被认为属于子网,如果它在该子网最低和最高地址之间。在IPv4版本的情况下,最低地址是网络地址,最高地址是广播地址。
参数
subnet
不一定是实际的网络地址(子网的最低地址)。它可以属于那个子网的任何有效的IP。特别是,如果它与此对象的IP地址相等,此函数总是会返回true(前提是子网掩码是有效的值)。另请参阅
- isInSubnet(subnet)
- 参数:
subnet – .std.pairQHostAddress,int
- 返回类型:
bool
这是一个重载函数。
如果此IP地址在由
subnet
描述的子网中,则返回true
。subnet
成员中的QHostAddress
包含网络前缀,int(第二个)成员包含子网掩码(前缀长度)。- isLinkLocal()#
- 返回类型:
bool
如果地址是IPv4或IPv6链路本地地址,则返回
true
,否则返回false
。IPv4链路本地地址是169.254.0.0/16网络中的一个地址。IPv6链路本地地址是fe80::/10网络中的一个地址。有关更多信息,请参阅IANA IPv6地址空间注册表。
- isLoopback()#
- 返回类型:
bool
返回
true
,如果地址是IPv6回环地址,或者任何IPv4回环地址。- isMulticast()#
- 返回类型:
bool
如果地址是IPv4或IPv6多播地址,则返回
true
,否则返回false
。- isNull()#
- 返回类型:
bool
如果此主机地址对任何主机或接口都无效,则返回
true
。默认构造函数创建了一个空地址。
另请参阅
- isPrivateUse()#
- 返回类型:
bool
如果地址是IPv6唯一本地单播地址或按照RFC 1918预留的IPv4本地网络地址,则返回
true
,否则返回false
。- isSiteLocal()#
- 返回类型:
bool
如果地址是IPv6站点本地地址,则返回
true
,否则返回false
。IPv6站点本地地址是网络fec0::/10中的地址。有关更多信息,请参阅IANA IPv6地址空间注册表。
IPv6站点本地地址已被弃用,不应在新应用程序中依赖。新应用程序不应依赖此函数,并将站点本地地址视为与全局地址相同(这也是为什么
isGlobal()
也返回true的原因)。站点本地地址已被唯一本地地址(ULA)所取代。- isUniqueLocalUnicast()#
- 返回类型:
bool
如果地址是IPv6唯一本地单播地址,则返回
true
,否则返回false
。IPv6唯一本地单播地址是网络fc00::/7中的地址。有关更多信息,请参阅IANA IPv6地址空间注册表。
请注意,唯一本地单播地址也被视为全局地址。RFC 4193表示,“在实际应用中,应用程序可以将这些地址视为全局作用域的地址。”只有路由器需要关心这种区别。
- __ne__(address)#
- 参数:
address –
SpecialAddress
- 返回类型:
bool
如果此主机地址与给定的
other
地址不同,则返回true
;否则返回false
。- __ne__(address)
- 参数:
address –
QHostAddress
- 返回类型:
bool
如果此主机地址与给定的
other
地址不同,则返回true
;否则返回false
。- __eq__(address)#
- 参数:
address –
SpecialAddress
- 返回类型:
bool
如果此主机地址与给定的其他地址相同,则返回
true
;否则返回false
。- __eq__(address)
- 参数:
address –
QHostAddress
- 返回类型:
bool
如果此主机地址与给定的
other
地址相同,则返回true
;否则返回false
。此运算符只是调用isEqual
(other,StrictConversion
)。另请参阅
- 静态 parseSubnet(subnet)#
- 参数:
subnet - 字符串
- 返回类型:
.std.pairQHostAddress,int
解析
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 之间的任何值
对于 IPv4,此函数接受前导组件缺失的情况(即少于 4 个八位字节,例如 "192.168.1"),并且可以跟或不跟点。如果在那种情况下子网掩码也缺失,它被设置为实际通过的字节数(在上述例子中,它将是 24,对于 3 个八位字节)。
另请参阅
返回主机地址的网络层协议。
- scopeId()#
- 返回类型:
字符串
返回 IPv6 地址的作用域 ID。对于 IPv4 地址,或者如果地址不包含作用域 ID,则返回空 QString。
IPv6 作用域 ID 指定了非全局 IPv6 地址的 可达性 范围,限制了地址可以使用的区域。所有 IPv6 地址都与这样的可达性作用域相关联。作用域 ID 用于区分那些不一定保证全局唯一的地址。
IPv6 指定了以下四个可达性级别
节点本地:仅用于与同一接口上的服务进行通信的地址(例如,回环接口 "::1")。
链路本地:本地于网络接口(链路)。对于您主机上的每个 IPv6 接口,始终有一个链路本地地址。链路本地地址("fe80...")是从本地网络适配器的 MAC 地址生成的,并且不保证其唯一性。
全局:用于全局可路由地址,例如互联网上的公共服务器。
在使用IPv6连接的链路本地或站点本地地址时,必须指定作用域ID。链路本地地址的作用域ID通常与接口名称(例如,“eth0”,“en1”)或编号(例如,“1”,“2”)相同。
- setAddress(address)#
- 参数:
address –
SpecialAddress
这是一个重载函数。
设置由
address
指定的特殊地址。- setAddress(ip4Addr)
- 参数:
ip4Addr – int
设置由
ip4Addr
指定的IPv4地址。- setAddress(address)
- 参数:
address – str
- 返回类型:
bool
这是一个重载函数。
设置由
address
指定的字符串表示的IPv4或IPv6地址(例如,“127.0.0.1”)。如果成功解析地址,则返回true
并设置地址;否则返回false
。- setAddress(ip6Addr)
- 参数:
ip6Addr –
QIPv6Address
- setScopeId(id)#
- 参数:
id – str
将地址的IPv6作用域ID设置为
id
。如果地址协议不是IPv6,则此函数不执行任何操作。作用域ID可以是接口名称(如“eth0”或“en1”)或表示接口索引的整数。如果id
是接口名称,QtNetwork将在调用操作系统的网络功能之前使用interfaceIndexFromName()
将其转换为接口索引。- swap(other)#
- 参数:
other –
QHostAddress
与
other
交换此主机地址。此操作非常快速且从不失败。- toIPv4Address([ok=None])#
- 参数:
ok - bool
- 返回类型:
int
返回作为数字的IPv4地址。
例如,如果地址是 127.0.0.1,则返回的值是 2130706433(即 0x7f000001)。
如果 protocol() 是 IPv4Protocol ,或者协议是 IPv6Protocol 且 IPv6 地址是 IPv4 映射地址(RFC4291),则该值有效。在这些情况下,ok 将设置为 true。否则,它将设置为 false。
另请参阅
- toIPv6Address()#
- 返回类型:
警告
本节包含自动从 C++ 转换为 Python 的代码片段,可能包含错误。
返回作为 Q_IPV6ADDR 结构的 IPv6 地址。该结构由 16 个无符号字符组成。
Q_IPV6ADDR addr = hostAddr.toIPv6Address() # addr contains 16 unsigned characters for i in range(0, 16): # process addr[i]
如果 protocol() 是 IPv6Protocol ,则该值有效。如果协议是 IPv4Protocol ,则地址将以 IPv4 映射 IPv6 地址的形式返回。(RFC4291)
另请参阅
- toString()#
- 返回类型:
字符串
返回地址作为字符串。
例如,如果地址是 IPv4 地址 127.0.0.1,则返回的字符串是“127.0.0.1”。对于 IPv6,字符串格式将遵循 RFC5952 建议的格式。对于 Any ,它的 IPv4 地址将返回(“0.0.0.0”)
另请参阅