阅读(1322) (0)

鸿蒙OS Inet6Address

2022-06-06 16:29:47 更新

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 地址的文本表示采用以下形式之一:

  1. 首选形式是 xxxx:x,其中 'x' 是地址的八个 16 位片段的十六进制值。这是完整的表格。例如,

请注意,不必在单个字段中写入前导零。但是,每个字段中必须至少有一个数字,除非如下所述。

  1. 由于某些分配某些样式的 IPv6 地址的方法,地址通常会包含长的零位字符串。为了使写入包含零位的地址更容易,可以使用一种特殊的语法来压缩零。使用“::”表示多组 16 位零。 “::”在一个地址中只能出现一次。 “::”也可用于压缩地址中的前导和/或尾随零。例如,

  1. 在处理 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 指的是本地系统上的一个接口,它可以通过两种方式指定。

  1. 作为数字标识符。 这必须是一个正整数,用于标识系统理解的特定接口和范围。 通常,数值可以通过系统上的管理工具来确定。 每个接口可能有多个值,每个范围一个。 如果未指定范围,则使用的默认值为零。
  2. 作为字符串。 这必须是 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。