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 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)

时间: 2024-10-07 22:21:57

java网络编程:InteAddress类API的相关文章

java网络编程ServerSocket类 和Socket类的常用构造方法及其方法

Socket类Socket(InetAddress address, int port) 创建一个流套接字并将其连接到指定 IP 地址的指定端口号.Socket(String host, int port) 创建一个流套接字并将其连接到指定主机上的指定端口号.Socket(InetAddress address, int port, InetAddress localAddr, int localPort) 创建一个套接字并将其连接到指定远程地址上的指定远程端口.Socket(String ho

Java网络编程---InetAddress类

InetAddress类 InetAddress类没有公共构造函数,但是它有三个静态方法,根据给出的信息可以返回适当初始化的InetAddress对象. //它们需要在必要时连接本地DNS服务器,填充InetAddress对象中的信息 //可能会抛出UnknownHostException的异常. getByName(String host) getAllByName(String host) getLocalHost() 由于DNS查找成本相对较高,InetAddress类会缓存查找的结果.

Java网络编程基础【转】

网络编程 网络编程对于很多的初学者来说,都是很向往的一种编程技能,但是很多的初学者却因为很长一段时间无法进入网络编程的大门而放弃了对于该部分技术的学习. 在 学习网络编程以前,很多初学者可能觉得网络编程是比较复杂的系统工程,需要了解很多和网络相关的基础知识,其实这些都不是很必需的.首先来问一个问题:你 会打手机吗?很多人可能说肯定会啊,不就是按按电话号码,拨打电话嘛,很简单的事情啊!其实初学者如果入门网络编程的话也可以做到这么简单! 网络编程就是在两个或两个以上的设备(例如计算机)之间传输数据.

第13篇-JAVA 网络编程

第13篇-JAVA 网络编程 每篇一句 比我强大的人都在努力我还有什么理由不拼命 初学心得 不去追逐你所渴求你将永远不会拥有 (笔者JEEP/711)[JAVA笔记 | 时间:2017-04-22| JAVA 网络编程 ] 1.网络编程基本概念 1.什么是计算机网络 计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备通过通信线路连接起来在网络操作系统网络管理软件及网络通讯协议的管理和协调下实现资源共享和信息传递的计算机系统 把分布在不同地理区域的计算机与专门的外部设备用通讯线路互

Java网络编程丶数据库编程丶XML解析技术。

Java网络编程 物理层. 数据链路层. 网络层. 传输层. 会话层. 表示层. 应用层. TCP/IP分层接口包括用于协作层分别完成以下的功能: 网络接口层. 网络互联层. 传输层. 应用层. 套接字: Socket.套接字.是一种抽象层. // 创建客户端Socket向服务器发起连接请求 Socket socket = new Socket("127.0.0.1", 30001); /* 利用已建立的socket创建输入输出流,处理与服务器端的连接 */ // 向服务器写入数据 B

Java网络编程技术

服务器端网络编程步骤 服务器端的编程步骤和客户端不同,是由四个步骤实现,依次是: 监听端口:服务器端属于被动等待连接,所以服务器端启动以后,不需要发起连接,而只需要监听本地计算机的某个固定端口即可.这个端口就是服务器端开放给客户端的端口,服务器端程序运行的本地计算机的IP地址就是服务器端程序的IP地址. 获得连接:当客户端连接到服务器端时,服务器端就可以获得一个连接,这个连接包含客户端的信息,例如客户端IP地址等等,服务器端和客户端也通过该连接进行数据交换.一般在服务器端编程中,当获得连接时,需

【转】JAVA网络编程基础

转来自己学习用 转自http://www.cnblogs.com/springcsc/archive/2009/12/03/1616413.html 网络编程 网络编程对于很多的初学者来说,都是很向往的一种编程技能,但是很多的初学者却因为很长一段时间无法进入网络编程的大门而放弃了对于该部分技术的学习. 在 学习网络编程以前,很多初学者可能觉得网络编程是比较复杂的系统工程,需要了解很多和网络相关的基础知识,其实这些都不是很必需的.首先来问一个问题:你 会打手机吗?很多人可能说肯定会啊,不就是按按电

Java网络编程技术1

1. Java网络编程常用API 1.1 InetAddress类使用示例 1.1.1根据域名查找IP地址 获取用户通过命令行方式指定的域名,然后通过InetAddress对象来获取该域名对应的IP地址.当然,程序运行时,需要计算机正常连接到Internet上. 例1. 根据域名查找IP地址 package Net; import java.net.InetAddress; import java.net.UnknownHostException; public class GetIP { pu

java网络编程入门教程

网络编程 网络编程对于很多的初学者来说,都是很向往的一种编程技能,但是很多的初学者却因为很长一段时间无法进入网络编程的大门而放弃了对于该部分技术的学习. 在 学习网络编程以前,很多初学者可能觉得网络编程是比较复杂的系统工程,需要了解很多和网络相关的基础知识,其实这些都不是很必需的.首先来问一个问题:你 会打手机吗?很多人可能说肯定会啊,不就是按按电话号码,拨打电话嘛,很简单的事情啊!其实初学者如果入门网络编程的话也可以做到这么简单! 网络编程就是在两个或两个以上的设备(例如计算机)之间传输数据.

java进阶--java网络编程

java网络编程 一.概述 网络编程是指编写运行在多个设备(计算机)的程序,这些设备都通过网络连接起来. java.net 包中 J2SE 的 API 包含有类和接口,它们提供低层次的通信细节.你可以直接使用这些类和接口,来专注于解决问题,而不用关注通信细节. java.net 包中提供了两种常见的网络协议的支持: TCP:TCP 是传输控制协议的缩写,它保障了两个应用程序之间的可靠通信.通常用于互联网协议,被称 TCP / IP. UDP:UDP 是用户数据报协议的缩写,一个无连接的协议.提供