简介
IP地址是IP使用的32位(IPv4)或者128位(IPv6)位无符号数字,它是传输层协议TCP,UDP的基础。InetAddress是Java对IP地址的封装,在java.net中有许多类都使用到了InetAddress,包括ServerSocket,Socket,DatagramSocket等等。
InetAddress的实例对象包含以数字形式保存的IP地址,同时还可能包含主机名(如果使用主机名来获取InetAddress的实例,或者使用数字来构造,并且启用了反向主机名解析的功能)。InetAddress类提供了将主机名解析为IP地址(或反之)的方法。
InetAddress对域名进行解析是使用本地机器配置或者网络命名服务(如域名系统(Domain Name System,DNS)和网络信息服务(Network Information Service,NIS))来实现。对于DNS来说,本地需要向DNS服务器发送查询的请求,然后服务器根据一系列的操作,返回对应的IP地址,为了提高效率,通常本地会缓存一些主机名与IP地址的映射,这样访问相同的地址,就不需要重复发送DNS请求了。在java.net.InetAddress类同样采用了这种策略。在默认情况下,会缓存一段有限时间的映射,对于主机名解析不成功的结果,会缓存非常短的时间(10秒)来提高性能。
具体使用
构造方法
http://www.javaweb.cc/help/JavaAPI1.6/index.html?java/nio/ReadOnlyBufferException.html
获得InetAddress对象:
getByAddress(byte[] addr) ~ 在给定原始 IP 地址的情况下,返回 InetAddress 对象。
getByAddress(String host, byte[] addr) ~ 根据提供的主机名和 IP 地址创建 InetAddress。
getAllByName(String host)~在给定主机名的情况下,根据系统上配置的名称服务返回其 IP 地址所组成的数组。
getByName(String host) ~在给定主机名的情况下确定主机的 IP 地址。
具体代码
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.Arrays;
/*
* InetAddress类
*/
public class Test01 {
public static void main(String[] args) throws UnknownHostException {
// 获取本机的InetAddress实例
InetAddress address1 = InetAddress.getLocalHost();
System.out.println("计算名:" + address1.getHostName());
System.out.println("IP地址:" + address1.getHostAddress());
// 在给定主机名的情况下,根据系统上配置的名称服务返回其 IP 地址所组成的数组。
System.out.println("根据系统上配置的名称服务返回其 IP 地址所组成的数组" + address1.getAllByName(address1.getHostName())[0]);
//获取此 IP 地址的完全限定域名。
System.out.println("获取此 IP 地址的完全限定域名"+address1.getCanonicalHostName());
// 获取原始(字节数组形式)的IP地址
byte[] bytes = address1.getAddress();
System.out.println("字节数组形式的IP:" + Arrays.toString(bytes));
System.out.println(address1);// 直接输出InetAddress对象
// 根据机器名获取InetAddress实例
InetAddress address2 = InetAddress.getByName("chenwei");
System.out.println("计算名:" + address2.getHostName());
System.out.println("IP地址:" + address2.getHostAddress());
// 将此对象与指定对象比较
System.out.println(address1.equals(address2));
}
}