java.net

接口
异常
java.lang.Object
  继承者 java.net.InetAddress
所有已实现的接口:
Serializable
直接已知子类:
Inet4Address, Inet6Address

public class InetAddress
     
extends Object
implements Serializable

此类表示互联网协议 (IP) 地址。

IP 地址是 IP 使用的 32 位或 128 位无符号数字,它是一种低级协议,UDP 和 TCP 协议都是在它的基础上构建的。IP 地址的体系结构是由 RFC 790:Assigned Numbers RFC 1918:Address Allocation for Private InternetsRFC 2365:Administratively Scoped IP MulticastRFC 2373:IP Version 6 Addressing Architecture 定义的。InetAddress 的实例包含 IP 地址,还可能包含相应的主机名(取决于它是否用主机名构造或者是否已执行反向主机名解析)。

地址类型

单播 单个接口的标识符。发送到单播地址的数据包被交付给由该地址标识的接口。

多播地址:也称为 anylocal 地址或通配符地址。一定不能将其分配给任何节点。它指示缺少地址。它的一个使用示例是可以作为绑定的目标,这允许服务器在服务器主机有多个接口的情况下接收任何接口上的客户端连接。

未指定 地址一定不能用作 IP 数据包的目标地址。

回送 地址:它是分配给回送接口的地址。发送到此 IP 地址的任何内容都将返回并作为本地主机上的 IP 输入。此地址常常在测试客户机时使用。

多播 一组接口(通常属于不同的节点)的标识符。发送到多播地址的数据包被交付给由该地址标识的所有接口。

IP 地址范围

链接本地 地址设计用于在单个链接上寻址以解决诸如自动地址配置、邻居发现 (neighbor discovery) 或没有路由器时的问题。

站点本地 地址设计用于在不需要全局前缀时站点内部寻址。

全局 地址在 Internet 中是唯一的。

IP 地址的文本表示形式

IP 地址的文本表示形式是特定于地址系列的。

有关 IPv4 地址格式,请参阅 Inet4Address#format,有关 IPv6 地址格式,请参阅 Inet6Address#format

主机名解析

主机名到 IP 地址的 解析 通过使用本地机器配置信息和网络命名服务(如域名系统(Domain Name System,DNS)和网络信息服务(Network Information Service,NIS))来实现。要使用的特定命名服务默认情况下是本地机器配置的那个。对于任何主机名称,都返回其相应的 IP 地址。

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

InetAddress 类提供将主机名解析为其 IP 地址(或反之)的方法。

InetAddress 缓存

InetAddress 类具有一个缓存,用于存储成功及不成功的主机名解析。

默认情况下,当为了防止 DNS 哄骗攻击安装了安全管理器时,正主机名解析的结果会永远缓存。当未安装安全管理器时,默认行为将缓存一段有限(与实现相关)时间的条目。不成功主机名解析的结果缓存非常短的时间(10 秒)以提高性能。

如果不需要默认行为,则可以将 Java 安全属性设置为另外的 Time-to-live (TTL) 值来进行正缓存。类似地,系统管理员在需要时可以配置另外的负缓存 TTL 值。

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

networkaddress.cache.ttl
指示从名称服务进行成功名称查找的缓存策略。该值被指定为整数,指示缓存成功查找的秒数。默认设置将在某个特定于实现的时间内缓存。

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

networkaddress.cache.negative.ttl(默认值:10)
指示从名称服务进行不成功名称查找的缓存策略。该值被指定为整数,指示缓存不成功查找故障的秒数。

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

从以下版本开始:
JDK1.0
另请参见:
getByAddress(byte[]), getByAddress(java.lang.String, byte[]), getAllByName(java.lang.String), getByName(java.lang.String), getLocalHost(), 序列化表格

方法摘要
 boolean equals(Object obj)
          将此对象与指定对象比较。
 byte[] getAddress()
          返回此 InetAddress 对象的原始 IP 地址。
static InetAddress[] getAllByName(String host)
          在给定主机名的情况下,根据系统上配置的名称服务返回其 IP 地址所组成的数组。
static InetAddress getByAddress(byte[] addr)
          在给定原始 IP 地址的情况下,返回 InetAddress 对象。
static InetAddress getByAddress(String host, byte[] addr)
          根据提供的主机名和 IP 地址创建 InetAddress。
static InetAddress getByName(String host)
          在给定主机名的情况下确定主机的 IP 地址。
 String getCanonicalHostName()
          获取此 IP 地址的完全限定域名。
 String getHostAddress()
          返回 IP 地址字符串(以文本表现形式)。
 String getHostName()
          获取此 IP 地址的主机名。
static InetAddress getLocalHost()
          返回本地主机。
 int hashCode()
          返回此 IP 地址的哈希码。
 boolean isAnyLocalAddress()
          检查 InetAddress 是否是通配符地址的实用例行程序。
 boolean isLinkLocalAddress()
          检查 InetAddress 是否是链接本地地址的实用例行程序。
 boolean isLoopbackAddress()
          检查 InetAddress 是否是回送地址的实用例行程序。
 boolean isMCGlobal()
          检查多播地址是否具有全局域的实用例行程序。
 boolean isMCLinkLocal()
          检查多播地址是否具有链接范围的实用例行程序。
 boolean isMCNodeLocal()
          检查多播地址是否具有节点范围的实用例行程序。
 boolean isMCOrgLocal()
          检查多播地址是否具有组织范围的实用例行程序。
 boolean isMCSiteLocal()
          检查多播地址是否具有站点范围的实用例行程序。
 boolean isMulticastAddress()
          检查 InetAddress 是否是 IP 多播地址的实用例行程序。
 boolean isReachable(int timeout)
          测试是否可以达到该地址。
 boolean isReachable(NetworkInterface netif, int ttl, int timeout)
          测试是否可以达到该地址。
 boolean isSiteLocalAddress()
          检查 InetAddress 是否是站点本地地址的实用例行程序。
 String toString()
          将此 IP 地址转换为 String
 
从类 java.lang.Object 继承的方法
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
 

方法详细信息

isMulticastAddress

public boolean isMulticastAddress()
检查 InetAddress 是否是 IP 多播地址的实用例行程序。

返回:
指示 InetAddress 是否是 IP 多播地址的 boolean
从以下版本开始:
JDK1.1

isAnyLocalAddress

public boolean isAnyLocalAddress()
检查 InetAddress 是否是通配符地址的实用例行程序。

返回:
指示 Inetaddress 是否是通配符地址的 boolean
从以下版本开始:
1.4

isLoopbackAddress

public boolean isLoopbackAddress()
检查 InetAddress 是否是回送地址的实用例行程序。

返回:
指示 InetAddress 是否是回送地址的 boolean 值;否则返回 false。
从以下版本开始:
1.4

isLinkLocalAddress

public boolean isLinkLocalAddress()
检查 InetAddress 是否是链接本地地址的实用例行程序。

返回:
指示 InetAddress 是否是本地链接地址的 boolean 值;如果地址不是链接本地单播地址,则返回 false。
从以下版本开始:
1.4

isSiteLocalAddress

public boolean isSiteLocalAddress()
检查 InetAddress 是否是站点本地地址的实用例行程序。

返回:
指示 InetAddress 是否是站点本地地址的 boolean 值;如果地址不是站点本地单播地址,则返回 false。
从以下版本开始:
1.4

isMCGlobal

public boolean isMCGlobal()
检查多播地址是否具有全局域的实用例行程序。

返回:
指示地址是否是全局域多播地址的 boolean 值;如果它不是全局域或多播地址,则返回 false
从以下版本开始:
1.4

isMCNodeLocal

public boolean isMCNodeLocal()
检查多播地址是否具有节点范围的实用例行程序。

返回:
指示地址是否是节点本地范围多播地址的 boolean 值;如果它不是节点本地范围或多播地址,则返回 false
从以下版本开始:
1.4

isMCLinkLocal

public boolean isMCLinkLocal()
检查多播地址是否具有链接范围的实用例行程序。

返回:
指示地址是否是链接本地范围多播地址的 boolean 值;如果它不是链接本地范围或多播地址,则返回 false
从以下版本开始:
1.4

isMCSiteLocal

public boolean isMCSiteLocal()
检查多播地址是否具有站点范围的实用例行程序。

返回:
指示地址是否是站点本地范围多播地址的 boolean;如果它不是站点本地范围或多播地址,则返回 false
从以下版本开始:
1.4

isMCOrgLocal

public boolean isMCOrgLocal()
检查多播地址是否具有组织范围的实用例行程序。

返回:
指示地址是否是组织本地范围多播地址的 boolean 值;如果它不是组织本地范围或多播地址,则返回 false
从以下版本开始:
1.4

isReachable

public boolean isReachable(int timeout)
                    throws IOException
测试是否可以达到该地址。实现尽最大努力试图到达主机,但防火墙和服务器配置可能阻塞请求,使其在某些特定的端口可以访问时处于不可到达状态。如果可以获得权限,则典型实现将使用 ICMP ECHO REQUEST;否则它将试图在目标主机的端口 7 (Echo) 上建立 TCP 连接。

超时值(以毫秒为单位)指示尝试应该使用的最大时间量。如果在获取应答前操作超时了,则视为主机不可到达。负值将导致抛出 IllegalArgumentException。

参数:
timeout - 调用中止前的时间(以毫秒为单位)
返回:
指示地址是否可到达的 boolean 值。
抛出:
IOException - 如果发生网络错误
IllegalArgumentException - 如果 timeout 为负。
从以下版本开始:
1.5

isReachable

public boolean isReachable(NetworkInterface netif,
                           int ttl,
                           int timeout)
                    throws IOException
测试是否可以达到该地址。实现尽最大努力试图到达主机,但防火墙和服务器配置可能阻塞请求,使其在某些特定的端口可以访问时处于不可到达状态。如果可以获得权限,则典型实现将使用 ICMP ECHO REQUEST;否则它将试图在目标主机的端口 7 (Echo) 上建立 TCP 连接。

network interfacettl 参数允许调用方指定测试将遍历的网络接口和数据包将遍历的最大跳数。ttl 为负值将导致抛出 IllegalArgumentException。

超时值(以毫秒为单位)指示尝试应该使用的最大时间量。如果在获取应答前操作超时了,则视为主机不可到达。负值将导致抛出 IllegalArgumentException。

参数:
netif - 将用于完成测试的 NetworkInterface;或者用于任何接口的 null
ttl - 要尝试的最大跳数或默认值 0
timeout - 调用中止前的时间(以毫秒为单位)
返回:
指示地址是否可到达的 boolean 值。
抛出:
IllegalArgumentException - 如果 timeoutttl 为负。
IOException - 如果发生网络错误
从以下版本开始:
1.5

getHostName

public String getHostName()
获取此 IP 地址的主机名。

如果此 InetAddress 是用主机名创建的,则记忆并返回主机名;否则,将执行反向名称查找并基于系统配置的名称查找服务返回结果。如果需要查找名称服务,则调用 getCanonicalHostName

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

返回:
此 IP 地址的主机名;如果安全检查不允许操作,则返回 IP 地址的文本表示形式。
另请参见:
getCanonicalHostName(), SecurityManager.checkConnect(java.lang.String, int)

getCanonicalHostName

public String getCanonicalHostName()
获取此 IP 地址的完全限定域名。最大努力方法,意味着根据底层系统配置可能不能返回 FQDN。

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

返回:
此 IP 地址的安全限定域名;如果安全检查不允许操作,则返回 IP 地址的文本表示形式。
从以下版本开始:
1.4
另请参见:
SecurityManager.checkConnect(java.lang.String, int)

getAddress

public byte[] getAddress()
返回此 InetAddress 对象的原始 IP 地址。结果按网络字节顺序:地址的高位字节位于 getAddress()[0] 中。

返回:
此对象的原始 IP 地址。

getHostAddress

public String getHostAddress()
返回 IP 地址字符串(以文本表现形式)。

返回:
字符串格式的原始 IP 地址。
从以下版本开始:
JDK1.0.2

hashCode

public int hashCode()
返回此 IP 地址的哈希码。

覆盖:
Object 中的 hashCode
返回:
此 IP 地址的哈希码值。
另请参见:
Object.equals(java.lang.Object), Hashtable

equals

public boolean equals(Object obj)
将此对象与指定对象比较。当且仅当参数不为 null,并且它表示与此对象相同的 IP 地址时,结果才为 true

如果 getAddress 对两个 InetAddress 返回的 byte 数组长度相同并且 byte 数组的每个数组元素也都相同,则这两个 InetAddress 的实例表示相同的 IP 地址。

覆盖:
Object 中的 equals
参数:
obj - 要与之比较的对象。
返回:
如果对象相同,则返回 true;否则,返回 false
另请参见:
getAddress()

toString

public String toString()
将此 IP 地址转换为 String。返回的字符串具有以下形式:主机名/字面值 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 地址 byte 数组的长度必须为 4 个字节,IPv6 byte 数组的长度必须为 16 个字节

参数:
host - 指定主机
addr - 网络字节顺序的原始 IP 地址
返回:
根据原始 IP 地址创建的 InetAddress 对象。
抛出:
UnknownHostException - 如果 IP 地址的长度非法
从以下版本开始:
1.4

getByName

public static InetAddress getByName(String host)
                             throws UnknownHostException
在给定主机名的情况下确定主机的 IP 地址。

主机名可以是机器名(如 "java.sun.com"),也可以是其 IP 地址的文本表示形式。如果提供字面值 IP 地址,则仅检查地址格式的有效性。

对于以字面值 IPv6 地址指定的 host,在 RFC 2732 中定义的形式或在 RFC 2373 中定义的字面值 IPv6 地址格式都可以接受。IPv6 范围地址也受支持。有关 IPv6 范围地址的描述,请参见这里

如果主机为 null,则返回表示回送接口地址的 InetAddress。请参阅 RFC 3330 的第 2 节和 RFC 2373 的第 2.5.3 节。

参数:
host - 指定的主机,或 null
返回:
给定主机名的 IP 地址。
抛出:
UnknownHostException - 如果找不到 host 的 IP 地址,或者 scope_id 是为全局 IPv6 地址指定的。
SecurityException - 如果安全管理器存在并且其 checkConnect 方法不允许进行该操作

getAllByName

public static InetAddress[] getAllByName(String host)
                                  throws UnknownHostException
在给定主机名的情况下,根据系统上配置的名称服务返回其 IP 地址所组成的数组。

主机名可以是机器名(如 "java.sun.com"),也可以是其 IP 地址的文本表示形式。如果提供字面值 IP 地址,则仅检查地址格式的有效性。

对于以字面值 IPv6 地址 指定的 host,在 RFC 2732 中定义的形式或在 RFC 2373 中定义的字面值 IPv6 地址格式都可以接受。字面值 IPv6 地址还可以通过追加范围时区标识符或 scope_id 来限定。scope_id 的语法和用法在这里描述。

如果主机为 null,则返回表示回送接口地址的 InetAddress。请参阅 RFC 3330 的第 2 节和 RFC 2373 的第 2.5.3 节。

如果有安全管理器,并且 host 非 null,host.length() 不等于零,则使用主机名和 -1 作为参数调用安全管理器的 checkConnect 方法,来查看是否允许该操作。

参数:
host - 主机名,或 null
返回:
给定主机名的所有 IP 地址所组成的数组。
抛出:
UnknownHostException - 如果找不到 host 的 IP 地址,或者 scope_id 是为全局 IPv6 地址指定的。
SecurityException - 如果安全管理器存在并且其 checkConnect 方法不允许进行该操作。
另请参见:
SecurityManager.checkConnect(java.lang.String, int)

getByAddress

public static InetAddress getByAddress(byte[] addr)
                                throws UnknownHostException
在给定原始 IP 地址的情况下,返回 InetAddress 对象。参数按网络字节顺序:地址的高位字节位于 getAddress()[0] 中。

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

IPv4 地址 byte 数组的长度必须为 4 个字节,IPv6 byte 数组的长度必须为 16 个字节

参数:
addr - 网络字节顺序的原始 IP 地址
返回:
根据原始 IP 地址创建的 InetAddress 对象。
抛出:
UnknownHostException - 如果 IP 地址的长度非法
从以下版本开始:
1.4

getLocalHost

public static InetAddress getLocalHost()
                                throws UnknownHostException
返回本地主机。

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

返回:
本地主机的 IP 地址。
抛出:
UnknownHostException - 如果找不到 host 的任何 IP 地址。
另请参见:
SecurityManager.checkConnect(java.lang.String, int)