java网络编程:InteAddress类API
Posted 自然鸟神
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java网络编程:InteAddress类API相关的知识,希望对你有一定的参考价值。
apache的http协议jar地址:http://hc.apache.org/downloads.cgi
类 InetAddress
java.lang.Object java.net.InetAddress
- 所有已实现的接口:
- Serializable
- 直接已知子类:
- Inet4Address, Inet6Address
此类表示互联网协议 (IP) 地址。IP 地址是 IP 使用的 32 位或 128 位无符号数字,它是一种低级协议,UDP 和 TCP 协议都是在它的基础上构建的。InetAddress 的实例包含 IP 地址,还可能包含相应的主机名(取决于它是否用主机名构造或者是否已执行反向主机名解析)。
地址类型
单播 单个接口的标识符。发送到单播地址的数据包被交付给由该地址标识的接口。 多播地址:也称为 anylocal 地址或通配符地址。一定不能将其分配给任何节点。它指示缺少地址。它的一个使用示例是可以作为绑定的目标,这允许服务器在服务器主机有多个接口的情况下接收任何接口上的客户端连接。
未指定 地址一定不能用作 IP 数据包的目标地址。
回送 地址:它是分配给回送接口的地址。发送到此 IP 地址的任何内容都将返回并作为本地主机上的 IP 输入。此地址常常在测试客户机时使用。
多播 一组接口(通常属于不同的节点)的标识符。发送到多播地址的数据包被交付给由该地址标识的所有接口。
IP 地址范围
链接本地 地址设计用于在单个链接上寻址以解决诸如自动地址配置、邻居发现 (neighbor discovery) 或没有路由器时的问题。
站点本地 地址设计用于在不需要全局前缀时站点内部寻址。
全局 地址在 Internet 中是唯一的。
InetAddress 缓存
InetAddress 类具有一个缓存,用于存储成功及不成功的主机名解析。默认情况下,当为了防止 DNS 哄骗攻击安装了安全管理器时,正主机名解析的结果会永远缓存。当未安装安全管理器时,默认行为将缓存一段有限(与实现相关)时间的条目。不成功主机名解析的结果缓存非常短的时间(10 秒)以提高性能。
如果不需要默认行为,则可以将 Java 安全属性设置为另外的 Time-to-live (TTL) 值来进行正缓存。类似地,系统管理员在需要时可以配置另外的负缓存 TTL 值。
两个 Java 安全属性控制着用于正负主机名解析缓存的 TTL 值:
networkaddress.cache.ttl:指示从名称服务进行成功名称查找的缓存策略。该值被指定为整数,指示缓存成功查找的秒数。默认设置将在某个特定于实现的时间内缓存。值 -1 指示“永远缓存”。
networkaddress.cache.negative.ttl(默认值:10):指示从名称服务进行不成功名称查找的缓存策略。该值被指定为整数,指示缓存不成功查找故障的秒数。值 0 指示“永远不缓存”。值 -1 指示“永远缓存”。
方法摘要 | |
---|---|
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 interface
和ttl
参数允许调用方指定测试将遍历的网络接口和数据包将遍历的最大跳数。ttl
为负值将导致抛出 IllegalArgumentException。超时值(以毫秒为单位)指示尝试应该使用的最大时间量。如果在获取应答前操作超时了,则视为主机不可到达。负值将导致抛出 IllegalArgumentException。
-
- 参数:
netif
- 将用于完成测试的 NetworkInterface;或者用于任何接口的 nullttl
- 要尝试的最大跳数或默认值 0timeout
- 调用中止前的时间(以毫秒为单位)- 返回:
- 指示地址是否可到达的
boolean
值。 - 抛出:
IllegalArgumentException
- 如果timeout
或ttl
为负。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)
以上是关于java网络编程:InteAddress类API的主要内容,如果未能解决你的问题,请参考以下文章