鸿蒙OS Inet6Address
Inet6Address
java.lang.Object
|---java.net.InetAddress
|---|---java.net.Inet6Address
public final class Inet6Address
extends InetAddress
此类表示 Internet 协议版本 6 (IPv6) 地址。 由 RFC 2373 定义:IP 版本 6 寻址体系结构。 IP 地址的文本表示用作方法输入的 IPv6 地址的文本表示采用以下形式之一:
- 首选形式是 xxxx:x,其中 'x' 是地址的八个 16 位片段的十六进制值。这是完整的表格。例如,
请注意,不必在单个字段中写入前导零。但是,每个字段中必须至少有一个数字,除非如下所述。
- 由于某些分配某些样式的 IPv6 地址的方法,地址通常会包含长的零位字符串。为了使写入包含零位的地址更容易,可以使用一种特殊的语法来压缩零。使用“::”表示多组 16 位零。 “::”在一个地址中只能出现一次。 “::”也可用于压缩地址中的前导和/或尾随零。例如,
- 在处理 IPv4 和 IPv6 节点的混合环境时,有时更方便的另一种形式是 xxxd.d.d.d,其中 'x' 是六个高位 16 位的十六进制值地址片段,'d' 是标准 IPv4 表示地址的四个低位 8 位片段的十进制值,例如,
其中 "::FFFF:d.d.d.d" 和 "::d.d.d.d" 分别是 IPv4 映射的 IPv6 地址和 IPv4 兼容的 IPv6 地址的一般形式。请注意,IPv4 部分必须采用“d.d.d.d”形式。以下表格无效:
以下表格:
是有效的,但是它是与 IPv4 兼容的 IPv6 地址的非常规表示,
而“::d”对应于通用 IPv6 地址“0:0:0:0:0:0:0:d”。
对于将文本表示形式作为输出值返回的方法,使用完整形式。 Inet6Address 将返回完整的形式,因为它在与其他文本数据结合使用时是明确的。
特殊 IPv6 地址
IPv6 范围地址的文本表示
如上所述的 IPv6 地址的文本表示可以扩展为指定 IPv6 范围的地址。 [draft-ietf-ipngwg-scoping-arch-04.txt] 中描述了对基本寻址架构的这种扩展。
因为链路本地地址和站点本地地址是非全局地址,所以不同的主机可能具有相同的目标地址,并且可以通过同一源系统上的不同接口访问。在这种情况下,始发系统被称为连接到同一范围的多个区域。为了区分哪个是预期的目标区域,可以将区域标识符(或 scope_id)附加到 IPv6 地址。
指定 scope_id 的一般格式如下:
IPv6 地址%scope_id
IPv6 地址是如上所述的文字 IPv6 地址。 scope_id 指的是本地系统上的一个接口,它可以通过两种方式指定。
- 作为数字标识符。 这必须是一个正整数,用于标识系统理解的特定接口和范围。 通常,数值可以通过系统上的管理工具来确定。 每个接口可能有多个值,每个范围一个。 如果未指定范围,则使用的默认值为零。
- 作为字符串。 这必须是 NetworkInterface.getName() 针对相关特定接口返回的确切字符串。 以这种方式创建 Inet6Address 时,通过查询相关 NetworkInterface 在创建对象时确定数字范围 ID。
另请注意,数字 scope_id 可以从 NetworkInterface 类返回的 Inet6Address 实例中检索。 这可用于找出系统上配置的当前范围 ID。
方法总结
修饰符和类型 | 方法 | 描述 |
---|---|---|
boolean | equals(Object obj) | 将此对象与指定对象进行比较。 |
byte[] | getAddress() | 返回此 InetAddress 对象的原始 IP 地址。 |
static Inet6Address | getByAddress(String host, byte[] addr, int scope_id) | 以 InetAddress#getByAddress(String,byte[]) 的确切方式创建 Inet6Address,但 IPv6 scope_id 设置为给定的数值。 |
static Inet6Address | getByAddress(String host, byte[] addr, NetworkInterface nif) | 以 InetAddress#getByAddress(String,byte[]) 的确切方式创建 Inet6Address,除了 IPv6 scope_id 设置为与 addr 中指定的地址类型的给定接口对应的值。 |
String | getHostAddress() | 以文本形式返回 IP 地址字符串。 |
NetworkInterface | getScopedInterface() | 如果此实例是使用作用域接口创建的,则返回作用域接口。 |
int | getScopeId() | 如果此实例与接口关联,则返回数字 scopeId。 |
int | hashCode() | 返回此 IP 地址的哈希码。 |
boolean | isAnyLocalAddress() | 检查 InetAddress 是否在通配符地址中的实用程序。 |
boolean | isIPv4CompatibleAddress() | 检查 InetAddress 是否为与 IPv4 兼容的 IPv6 地址的实用程序。 |
boolean | isLinkLocalAddress() | 检查 InetAddress 是否为链接本地地址的实用程序。 |
boolean | isLoopbackAddress() | 检查 InetAddress 是否为环回地址的实用程序。 |
boolean | isMCGlobal() | 检查多播地址是否具有全局范围的实用程序。 |
boolean | isMCLinkLocal() | 检查多播地址是否具有链接范围的实用程序。 |
boolean | isMCNodeLocal() | 检查多播地址是否具有节点范围的实用程序。 |
boolean | isMCOrgLocal() | 检查多播地址是否具有组织范围的实用程序。 |
boolean | isMCSiteLocal() | 检查多播地址是否具有站点范围的实用程序。 |
boolean | isMulticastAddress() | 检查 InetAddress 是否为 IP 多播地址的实用程序。 |
boolean | isSiteLocalAddress() | 检查 InetAddress 是否为站点本地地址的实用程序例程。 |
从类 java.net.InetAddress 继承的方法 |
---|
getAllByName, getByAddress, getByAddress, getByName, getCanonicalHostName, getHostName, getLocalHost, getLoopbackAddress, isReachable, isReachable, toString |
从类 java.lang.Object 继承的方法 |
---|
clone, finalize, getClass, notify, notifyAll, wait, wait, wait |
方法详情
getByAddress
public static Inet6Address getByAddress(String host, byte[] addr, NetworkInterface nif) throws UnknownHostException
以 InetAddress#getByAddress(String,byte[]) 的确切方式创建 Inet6Address,除了 IPv6 scope_id 设置为与 addr 中指定的地址类型的给定接口对应的值。 如果给定接口没有为给定地址类型(例如链接本地或站点本地)分配数字 scope_id,则调用将失败并返回 UnknownHostException。
参数:
参数名称 | 参数描述 |
---|---|
host | 指定的主机 |
addr | 网络字节顺序的原始 IP 地址 |
nif | 此地址必须关联的接口。 |
返回:
从原始 IP 地址创建的 Inet6Address 对象。
Throws:
Throw名称 | Throw描述 |
---|---|
UnknownHostException | 如果 IP 地址的长度非法,或者接口没有为给定的地址类型分配数字 scope_id。 |
getByAddress
public static Inet6Address getByAddress(String host, byte[] addr, int scope_id) throws UnknownHostException
以 InetAddress#getByAddress(String,byte[]) 的确切方式创建 Inet6Address,但 IPv6 scope_id 设置为给定的数值。 不检查 scope_id 以确定它是否对应于系统上的任何接口。
参数:
参数名称 | 参数描述 |
---|---|
host | 指定的主机 |
addr | 网络字节顺序的原始 IP 地址 |
scope_id | 地址的数字 scope_id。 |
返回:
从原始 IP 地址创建的 Inet6Address 对象。
Throws:
Throw名称 | Throw描述 |
---|---|
UnknownHostException | 如果 IP 地址的长度非法。 |
isMulticastAddress
public boolean isMulticastAddress()
检查 InetAddress 是否为 IP 多播地址的实用程序。 地址开头的 11111111 将该地址标识为多播地址。
覆盖:
类 InetAddress 中的 isMulticastAddress
返回:
一个布尔值,指示 InetAddress 是否为 IP 多播地址
isAnyLocalAddress
public boolean isAnyLocalAddress()
检查 InetAddress 是否在通配符地址中的实用程序。
覆盖:
类 InetAddress 中的 isAnyLocalAddress
返回:
一个布尔值,指示 Inetaddress 是否为通配符地址。
isLoopbackAddress
public boolean isLoopbackAddress()
检查 InetAddress 是否为环回地址的实用程序。
覆盖:
类 InetAddress 中的 isLoopbackAddress
返回:
一个布尔值,指示 InetAddress 是否为环回地址; 否则为假。
isLinkLocalAddress
public boolean isLinkLocalAddress()
检查 InetAddress 是否为链接本地地址的实用程序。
覆盖:
类 InetAddress 中的 isLinkLocalAddress
返回:
一个布尔值,指示 InetAddress 是否是链接本地地址; 如果地址不是链接本地单播地址,则为 false。
isSiteLocalAddress
public boolean isSiteLocalAddress()
检查 InetAddress 是否为站点本地地址的实用程序例程。
覆盖:
类 InetAddress 中的 isSiteLocalAddress
返回:
一个布尔值,指示 InetAddress 是否是站点本地地址; 如果地址不是站点本地单播地址,则为 false。
isMCGlobal
public boolean isMCGlobal()
检查多播地址是否具有全局范围的实用程序。
覆盖:
类 InetAddress 中的 isMCGlobal
返回:
一个布尔值,指示地址是否是全局范围的多播地址,如果不是全局范围或不是多播地址,则为 false
isMCNodeLocal
public boolean isMCNodeLocal()
检查多播地址是否具有节点范围的实用程序。
覆盖:
类 InetAddress 中的 isMCNodeLocal
返回:
一个布尔值,指示地址是否是节点本地范围的多播地址,如果它不是节点本地范围或不是多播地址,则为 false
isMCLinkLocal
public boolean isMCLinkLocal()
检查多播地址是否具有链接范围的实用程序。
覆盖:
类 InetAddress 中的 isMCLinkLocal
返回:
一个布尔值,指示地址是否是链路本地范围的多播地址,如果不是链路本地范围或不是多播地址,则为 false
isMCSiteLocal
public boolean isMCSiteLocal()
检查多播地址是否具有站点范围的实用程序。
覆盖:
类 InetAddress 中的 isMCSiteLocal
返回:
一个布尔值,指示地址是否是站点本地范围的多播地址,如果它不是站点本地范围或不是多播地址,则为 false
isMCOrgLocal
public boolean isMCOrgLocal()
检查多播地址是否具有组织范围的实用程序。
覆盖:
类 InetAddress 中的 isMCOrgLocal
返回:
一个布尔值,指示地址是否是组织本地范围的多播地址,如果它不是组织本地范围或不是多播地址,则为 false
getAddress
public byte[] getAddress()
返回此 InetAddress 对象的原始 IP 地址。 结果按网络字节顺序排列:地址的最高字节在 getAddress()[0] 中。
覆盖:
类 InetAddress 中的 getAddress
返回:
此对象的原始 IP 地址。
getScopeId
public int getScopeId()
如果此实例与接口关联,则返回数字 scopeId。 如果没有设置 scoped_id,则返回值为零。
返回:
scopeId,如果未设置,则为零。
getScopedInterface
public NetworkInterface getScopedInterface()
如果此实例是使用作用域接口创建的,则返回作用域接口。
返回:
作用域接口,如果未设置,则为 null。
getHostAddress
public String getHostAddress()
以文本形式返回 IP 地址字符串。 如果创建实例时指定了范围标识符,则范围 id 将附加到 IP 地址前面,并以“%”(百分比)字符开头。 这可以是数值或字符串,具体取决于用于创建实例的类型。
覆盖:
类 InetAddress 中的 getHostAddress
返回:
字符串格式的原始 IP 地址。
hashCode
public int hashCode()
返回此 IP 地址的哈希码。
覆盖:
InetAddress 类中的 hashCode
返回:
此 IP 地址的哈希码值。
equals
public boolean equals(Object obj)
将此对象与指定对象进行比较。 当且仅当参数不为 null 并且它表示与此对象相同的 IP 地址时,结果才为真。
如果 getAddress 返回的字节数组的长度对于两者相同,并且每个数组组件对于字节数组都相同,则 InetAddress 的两个实例表示相同的 IP 地址。
覆盖:
等于类 InetAddress
参数:
参数名称 | 参数描述 |
---|---|
obj | 要比较的对象。 |
返回:
如果对象相同,则为 true; 否则为false。
isIPv4CompatibleAddress
public boolean isIPv4CompatibleAddress()
检查 InetAddress 是否为与 IPv4 兼容的 IPv6 地址的实用程序。
返回:
一个布尔值,指示 InetAddress 是否是与 IPv4 兼容的 IPv6 地址; 如果地址是 IPv4 地址,则为 false。