树叶云鸿蒙OS教程:鸿蒙OS InetAddress

InetAddress

java.lang.Object

|—java.net.InetAddress

public class InetAddress
extends Object
implements Serializable

此类表示 Internet 协议 (IP) 地址。

IP 地址是 IP 使用的 32 位或 128 位无符号数字,IP 是一种较低级别的协议,UDP 和 TCP 等协议都基于该协议构建。 IP 地址架构由 RFC 790:分配的号码、RFC 1918:专用 Internet 的地址分配、RFC 2365:管理范围的 IP 多播和 RFC 2373:IP 版本 6 寻址架构定义。 InetAddress 的一个实例由一个 IP 地址和可能的它对应的主机名组成(取决于它是用主机名构造的,还是已经完成了反向主机名解析)。

地址类型 IP 地址范围

链路本地地址设计用于在单个链路上寻址,用于自动地址配置、邻居发现或不存在路由器时。

站点本地地址旨在用于在站点内部进行寻址,而无需全局前缀。

全球地址在互联网上是唯一的。

IP 地址的文本表示 IP 地址的文本表示是地址族特定的。

有几个系统属性会影响 IPv4 和 IPv6 地址的使用方式。

主机名解析 主机名到 IP 地址的解析是通过结合使用本地机器配置信息和网络命名服务(例如域名系统 (DNS) 和网络信息服务 (NIS))来完成的。 默认情况下,正在使用的特定命名服务是本地计算机配置的服务。 对于任何主机名,都会返回其对应的 IP 地址。

反向名称解析意味着对于任何 IP 地址,都会返回与该 IP 地址关联的主机。

InetAddress 类提供将主机名解析为其 IP 地址的方法,反之亦然。

InetAddress 缓存 InetAddress 类有一个缓存来存储成功和不成功的主机名解析。

默认情况下,安装安全管理器时,为了防止 DNS 欺骗攻击,正向主机名解析的结果将被永久缓存。未安装安全管理器时,默认行为是将条目缓存一段有限的(取决于实现的)时间段。不成功的主机名解析结果将被缓存很短的时间(10 秒)以提高性能。

如果不需要默认行为,则可以将 Java 安全属性设置为不同的生存时间 (TTL) 值以进行正缓存。同样,系统管理员可以在需要时配置不同的负缓存 TTL 值。

两个 Java 安全属性控制用于正和负主机名解析缓存的 TTL 值:

networkaddress.cache.ttl

指示从名称服务中成功查找名称的缓存策略。 该值指定为整数,以指示缓存成功查找的秒数。 默认设置是缓存实现特定的时间段。

-1 值表示“永远缓存”。

networkaddress.cache.negative.ttl (默认值:10)

指示来自名称服务的不成功名称查找的缓存策略。 该值指定为整数,以指示缓存不成功查找失败的秒数。

值 0 表示“从不缓存”。 -1 值表示“永远缓存”。

方法总结

修饰符和类型方法描述
booleanequals(Object obj)将此对象与指定对象进行比较。
byte[]getAddress()返回此 InetAddress 对象的原始 IP 地址。
static InetAddress[]getAllByName(String host)给定主机的名称,根据系统上配置的名称服务返回其 IP 地址的数组。
static InetAddressgetByAddress(byte[] addr)返回给定原始 IP 地址的 InetAddress 对象。
static InetAddressgetByAddress(String host, byte[] addr)根据提供的主机名和 IP 地址创建 InetAddress。
static InetAddressgetByName(String host)给定主机名,确定主机的 IP 地址。
StringgetCanonicalHostName()获取此 IP 地址的完全限定域名。
StringgetHostAddress()以文本形式返回 IP 地址字符串。
StringgetHostName()获取此 IP 地址的主机名。
static InetAddressgetLocalHost()返回本地主机的地址。
static InetAddressgetLoopbackAddress()返回环回地址。
inthashCode()返回此 IP 地址的哈希码。
booleanisAnyLocalAddress()检查 InetAddress 是否在通配符地址中的实用程序。
booleanisLinkLocalAddress()检查 InetAddress 是否为链接本地地址的实用程序。
booleanisLoopbackAddress()检查 InetAddress 是否为环回地址的实用程序。
booleanisMCGlobal()检查多播地址是否具有全局范围的实用程序。
booleanisMCLinkLocal()检查多播地址是否具有链接范围的实用程序。
booleanisMCNodeLocal()检查多播地址是否具有节点范围的实用程序。
booleanisMCOrgLocal()检查多播地址是否具有组织范围的实用程序。
booleanisMCSiteLocal()检查多播地址是否具有站点范围的实用程序。
booleanisMulticastAddress()检查 InetAddress 是否为 IP 多播地址的实用程序。
booleanisReachable(int timeout)测试该地址是否可达。
booleanisReachable(NetworkInterface netif, int ttl, int timeout)测试该地址是否可达。
booleanisSiteLocalAddress()检查 InetAddress 是否为站点本地地址的实用程序例程。
StringtoString()将此 IP 地址转换为字符串。
从类 java.lang.Object 继承的方法
clone, finalize, getClass, notify, notifyAll, wait, wait, wait

方法详情

isMulticastAddress

public boolean isMulticastAddress()

检查 InetAddress 是否为 IP 多播地址的实用程序。

返回:

一个布尔值,指示 InetAddress 是否为 IP 多播地址

isAnyLocalAddress

public boolean isAnyLocalAddress()

检查 InetAddress 是否在通配符地址中的实用程序。

返回:

一个布尔值,指示 Inetaddress 是否为通配符地址。

isLoopbackAddress

public boolean isLoopbackAddress()

检查 InetAddress 是否为环回地址的实用程序。

返回:

一个布尔值,指示 InetAddress 是否为环回地址; 否则为假。

isLinkLocalAddress

public boolean isLinkLocalAddress()

检查 InetAddress 是否为链接本地地址的实用程序。

返回:

一个布尔值,指示 InetAddress 是否是链接本地地址; 如果地址不是链接本地单播地址,则为 false。

isSiteLocalAddress

public boolean isSiteLocalAddress()

检查 InetAddress 是否为站点本地地址的实用程序例程。

返回:

一个布尔值,指示 InetAddress 是否是站点本地地址; 如果地址不是站点本地单播地址,则为 false。

isMCGlobal

public boolean isMCGlobal()

检查多播地址是否具有全局范围的实用程序。

返回:

一个布尔值,指示地址是否是全局范围的多播地址,如果不是全局范围或不是多播地址,则为 false

isMCNodeLocal

public boolean isMCNodeLocal()

检查多播地址是否具有节点范围的实用程序。

返回:

一个布尔值,指示地址是否是节点本地范围的多播地址,如果它不是节点本地范围或不是多播地址,则为 false

isMCLinkLocal

public boolean isMCLinkLocal()

检查多播地址是否具有链接范围的实用程序。

返回:

一个布尔值,指示地址是否是链路本地范围的多播地址,如果不是链路本地范围或不是多播地址,则为 false

isMCSiteLocal

public boolean isMCSiteLocal()

检查多播地址是否具有站点范围的实用程序。

返回:

一个布尔值,指示地址是否是站点本地范围的多播地址,如果它不是站点本地范围或不是多播地址,则为 false

isMCOrgLocal

public boolean isMCOrgLocal()

检查多播地址是否具有组织范围的实用程序。

返回:

一个布尔值,指示地址是否是组织本地范围的多播地址,如果它不是组织本地范围或不是多播地址,则为 false

isReachable

public boolean isReachable(int timeout) throws IOException

测试该地址是否可达。 实现会尽最大努力尝试访问主机,但防火墙和服务器配置可能会阻止请求,从而导致无法访问状态,而某些特定端口可能可以访问。 如果可以获得特权,典型的实现将使用 ICMP ECHO REQUEST,否则它将尝试在目标主机的端口 7 (Echo) 上建立 TCP 连接。

超时值(以毫秒为单位)表示尝试应该花费的最长时间。 如果在得到应答之前操作超时,则认为主机不可达。 负值将导致抛出 IllegalArgumentException。

参数:

参数名称参数描述
timeout呼叫中止之前的时间(以毫秒为单位)

返回:

一个布尔值,指示地址是否可达。

Throws:

Throw名称Throw描述
IOException如果发生网络错误
IllegalArgumentException如果超时为负。

isReachable

public boolean isReachable(NetworkInterface netif, int ttl, int timeout) throws IOException

测试该地址是否可达。 实现会尽最大努力尝试访问主机,但防火墙和服务器配置可能会阻止请求,从而导致无法访问状态,而某些特定端口可能可以访问。 如果可以获得特权,典型的实现将使用 ICMP ECHO REQUEST,否则它将尝试在目标主机的端口 7 (Echo) 上建立 TCP 连接。

网络接口和 ttl 参数让调用者指定测试将通过哪个网络接口以及数据包应该通过的最大跳数。 ttl 的负值将导致抛出 IllegalArgumentException。

超时值(以毫秒为单位)表示尝试应该花费的最长时间。 如果在得到应答之前操作超时,则认为主机不可达。 负值将导致抛出 IllegalArgumentException。

参数:

参数名称参数描述
netif将通过其完成测试的 NetworkInterface,或者对于任何接口为 null
ttl要尝试的最大跳数或默认值为 0
timeout呼叫中止之前的时间(以毫秒为单位)

返回:

一个布尔值,指示地址是否可达。

Throws:

Throw名称Throw描述
IllegalArgumentException如果 timeout 或 ttl 为负数。
IOException如果发生网络错误

getHostName

public String getHostName()

获取此 IP 地址的主机名。

如果这个 InetAddress 是用一个主机名创建的,这个主机名会被记住并返回; 否则,将执行反向名称查找,并根据系统配置的名称查找服务返回结果。 如果需要查找名称服务,请调用 getCanonicalHostName。

如果有安全管理器,首先调用它的 checkConnect 方法,并使用主机名和 -1 作为其参数,以查看是否允许该操作。 如果不允许该操作,它将返回 IP 地址的文本表示。

返回:

此 IP 地址的主机名,或者如果安全检查不允许该操作,则为 IP 地址的文本表示。

getCanonicalHostName

public String getCanonicalHostName()

获取此 IP 地址的完全限定域名。 尽力而为的方法,这意味着我们可能无法根据底层系统配置返回 FQDN。

如果有安全管理器,该方法首先调用它的 checkConnect 方法,以主机名和 -1 作为其参数,以查看是否允许调用代码知道该 IP 地址的主机名,即连接到主机。 如果不允许该操作,它将返回 IP 地址的文本表示。

返回:

此 IP 地址的完全限定域名,或者如果安全检查不允许该操作,则为 IP 地址的文本表示。

getAddress

public byte[] getAddress()

返回此 InetAddress 对象的原始 IP 地址。 结果按网络字节顺序排列:地址的最高字节在 getAddress()[0] 中。

返回:

此对象的原始 IP 地址。

getHostAddress

public String getHostAddress()

以文本形式返回 IP 地址字符串。

返回:

字符串格式的原始 IP 地址。

hashCode

public int hashCode()

返回此 IP 地址的哈希码。

覆盖:

类 Object 中的 hashCode

返回:

此 IP 地址的哈希码值。

equals

public boolean equals(Object obj)

将此对象与指定对象进行比较。 当且仅当参数不为 null 并且它表示与此对象相同的 IP 地址时,结果才为真。

如果 getAddress 返回的字节数组的长度对于两者相同,并且每个数组组件对于字节数组都相同,则 InetAddress 的两个实例表示相同的 IP 地址。

覆盖:

类 Object 中的等于

参数:

参数名称参数描述
obj要比较的对象。

返回:

如果对象相同,则为 true; 否则为false。

toString

public String toString()

将此 IP 地址转换为字符串。 返回的字符串格式为:主机名/文字 IP 地址。 如果主机名未解析,则不执行反向名称服务查找。 主机名部分将由一个空字符串表示。

覆盖:

类 Object 中的 toString

返回:

此 IP 地址的字符串表示形式。

getByAddress

public static InetAddress getByAddress(String host, byte[] addr) throws UnknownHostException

根据提供的主机名和 IP 地址创建 InetAddress。 不检查名称服务的地址有效性。

主机名可以是机器名,例如“java.sun.com”,也可以是其 IP 地址的文本表示。

也不会对主机名进行有效性检查。

如果 addr 指定 IPv4 地址,则将返回 Inet4Address 的实例; 否则,将返回 Inet6Address 的实例。

IPv4 地址字节数组必须为 4 字节长,IPv6 字节数组必须为 16 字节长

参数:

参数名称参数描述
host指定的主机
addr网络字节顺序的原始 IP 地址

返回:

从原始 IP 地址创建的 InetAddress 对象。

Throws:

Throw名称Throw描述
UnknownHostException如果 IP 地址的长度非法

getByName

public static InetAddress getByName(String host) throws UnknownHostException

给定主机名,确定主机的 IP 地址。

主机名可以是机器名,例如“java.sun.com”,也可以是其 IP 地址的文本表示。 如果提供了文字 IP 地址,则仅检查地址格式的有效性。

对于以文字 IPv6 地址指定的主机,接受 RFC 2732 中定义的格式或 RFC 2373 中定义的文字 IPv6 地址格式。 还支持 IPv6 范围地址。

如果主机为空,则返回表示环回接口地址的 InetAddress。

参数:

参数名称参数描述
host指定的主机,或者为空。

返回:

给定主机名的 IP 地址。

Throws:

Throw名称Throw描述
UnknownHostException如果找不到主机的 IP 地址,或者为全局 IPv6 地址指定了 scope_id。
SecurityException如果存在安全管理器并且其 checkConnect 方法不允许该操作

getAllByName

public static InetAddress[] getAllByName(String host) throws UnknownHostException

给定主机的名称,根据系统上配置的名称服务返回其 IP 地址的数组。

主机名可以是机器名,例如“java.sun.com”,也可以是其 IP 地址的文本表示。如果提供了文字 IP 地址,则仅检查地址格式的有效性。

对于以文字 IPv6 地址指定的主机,接受 RFC 2732 中定义的格式或 RFC 2373 中定义的文字 IPv6 地址格式。文字 IPv6 地址也可以通过附加作用域区域标识符或 scope_id 来限定。此处描述了 scope_ids 的语法和用法。

如果主机为空,则返回表示环回接口地址的 InetAddress。

如果存在安全管理器且主机不为空且 host.length() 不等于 0,则使用主机名和 -1 作为其参数调用安全管理器的 checkConnect 方法,以查看是否允许操作。

参数:

参数名称参数描述
host主机名,或为空。

返回:

给定主机名的所有 IP 地址的数组。

Throws:

Throw名称Throw描述
UnknownHostException如果找不到主机的 IP 地址,或者为全局 IPv6 地址指定了 scope_id。
SecurityException如果存在安全管理器并且其 checkConnect 方法不允许该操作。

getLoopbackAddress

public static InetAddress getLoopbackAddress()

返回环回地址。

返回的 InetAddress 将表示 IPv4 环回地址 127.0.0.1 或 IPv6 环回地址 ::1。 返回的 IPv4 环回地址只是 127…* 形式的众多地址之一

返回:

InetAddress 环回实例。

getByAddress

public static InetAddress getByAddress(byte[] addr) throws UnknownHostException

返回给定原始 IP 地址的 InetAddress 对象。 参数按网络字节顺序排列:地址的最高字节在 getAddress()[0] 中。

此方法不会阻塞,即不执行反向名称服务查找。

IPv4 地址字节数组必须为 4 字节长,IPv6 字节数组必须为 16 字节长

参数:

参数名称参数描述
addr网络字节顺序的原始 IP 地址

返回:

从原始 IP 地址创建的 InetAddress 对象。

Throws:

Throw名称Throw描述
UnknownHostException如果 IP 地址的长度非法

getLocalHost

public static InetAddress getLocalHost() throws UnknownHostException

返回本地主机的地址。 这是通过从系统中检索主机的名称,然后将该名称解析为 InetAddress 来实现的。

注意:解析后的地址可能会被缓存一小段时间。

如果有安全管理器,则使用本地主机名和 -1 作为其参数调用其 checkConnect 方法,以查看是否允许该操作。 如果不允许该操作,则返回表示环回地址的 InetAddress。

返回:

本地主机的地址。

Throws:

Throw名称Throw描述
UnknownHostException如果本地主机名无法解析为地址。

文章来源网络,作者:运维,如若转载,请注明出处:https://shuyeidc.com/wp/211332.html<

(0)
运维的头像运维
上一篇2025-04-10 08:33
下一篇 2025-04-10 08:35

相关推荐

  • 个人主题怎么制作?

    制作个人主题是一个将个人风格、兴趣或专业领域转化为视觉化或结构化内容的过程,无论是用于个人博客、作品集、社交媒体账号还是品牌形象,核心都是围绕“个人特色”展开,以下从定位、内容规划、视觉设计、技术实现四个维度,详细拆解制作个人主题的完整流程,明确主题定位:找到个人特色的核心主题定位是所有工作的起点,需要先回答……

    2025-11-20
    0
  • 社群营销管理关键是什么?

    社群营销的核心在于通过建立有温度、有价值、有归属感的社群,实现用户留存、转化和品牌传播,其管理需贯穿“目标定位-内容运营-用户互动-数据驱动-风险控制”全流程,以下从五个维度展开详细说明:明确社群定位与目标社群管理的首要任务是精准定位,需明确社群的核心价值(如行业交流、产品使用指导、兴趣分享等)、目标用户画像……

    2025-11-20
    0
  • 香港公司网站备案需要什么材料?

    香港公司进行网站备案是一个涉及多部门协调、流程相对严谨的过程,尤其需兼顾中国内地与香港两地的监管要求,由于香港公司注册地与中国内地不同,其网站若主要服务内地用户或使用内地服务器,需根据服务器位置、网站内容性质等,选择对应的备案路径(如工信部ICP备案或公安备案),以下从备案主体资格、流程步骤、材料准备、注意事项……

    2025-11-20
    0
  • 如何企业上云推广

    企业上云已成为数字化转型的核心战略,但推广过程中需结合行业特性、企业痛点与市场需求,构建系统性、多维度的推广体系,以下从市场定位、策略设计、执行落地及效果优化四个维度,详细拆解企业上云推广的实践路径,精准定位:明确目标企业与核心价值企业上云并非“一刀切”的方案,需先锁定目标客户群体,提炼差异化价值主张,客户分层……

    2025-11-20
    0
  • PS设计搜索框的实用技巧有哪些?

    在PS中设计一个美观且功能性的搜索框需要结合创意构思、视觉设计和用户体验考量,以下从设计思路、制作步骤、细节优化及交互预览等方面详细说明,帮助打造符合需求的搜索框,设计前的规划明确使用场景:根据网站或APP的整体风格确定搜索框的调性,例如极简风适合细线条和纯色,科技感适合渐变和发光效果,电商类则可能需要突出搜索……

    2025-11-20
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注