Java提供InetAddress类来封装IP地址或域或名。InetAddress类有两个子类:Inet4Address和Inet6Address,分别用于封装4个字节的IP地址和6个字节的IP地址。InetAddress内部对地址数字进行隐藏,用户不需要了解实现地址的细节,只需了解如何调用相应的方法即可。
InetAddress类无构造方法,因此不能直接创建其对象,而是通过该类的静态方法创建一个InetAddress对象或InetAddress数组。InetAddress类常用方法如下
方法 | 功能描述 |
---|---|
public static InetAddress getLocalHost() | 获取本机对应的InetAddress对象 |
public static InetAddress getByName(String host) | 根据主机获得对应的InetAddress对象,参数host可以是IP地址或域名 |
public static InetAddress[] getAllByName(String host) | 根据主机获得对应的InetAddress对象 |
public static InetAddress getByAddress(byte[] addr) | 获取addr所封装的IP地址对应的Inet Address对象 |
public String getCanonicalHostName() | 获取此IP地址的全限定域名 |
public bytes[] getHostAddress() | 获取该InetAddress对象对应的IP地址字符串 |
public String getHostName() | 获得该InetAddress对象的主机名称 |
public boolean isReachable(int timeout) | 判断是否可以到达该地址 |
示例代码
import java.net.InetAddress;
import java.net.UnknownHostException;
public class InetAddressDemo {
public static void main(String[] args) {
try{
//获取本机地址信息
InetAddress localIp=InetAddress.getLocalHost();
System.out.println("localIp.getCanonicalHostName()="
+ localIp.getCanonicalHostName());
System.out.println("localIp.getHostAddress()="
+ localIp.getHostAddress());
System.out.println("localIp.getHostName()="
+ localIp.getHostName());
System.out.println("localIp.toString()="+localIp.toString()); System.out.println("localIp.isReachable(5000)="
+ localIp.isReachable(5000));
System.out.println("====================================");//获取指定域名地址信息
InetAddress baiduIp = InetAddress.getByName("www.baidu.com");
System.out.println("baiduIp.getCanonicalHostName()="
+ baiduIp.getCanonicalHostName());
System.out.println("baiduIp.getHostAddress()="
+ baiduIp.getHostAddress());
System.out.println("baiduIp.getHostName()="
+ baiduIp.getHostName());
System.out.println("baiduIp.toString()="+baiduIp.toString());
System.out.println("baiduIp.isReachable(5000)="
+ baiduIp.isReachable(5000));
System.out.println("====================================");
//获取指定原始IP地址信息
InetAddress ip = InetAddress.getByAddress(new byte[]{127,0,0,1});
// InetAddress ip = InetAddress.getByName("127.0.0.1");
System.out.println("ip.getCanonicalHostName()="
+ ip.getCanonicalHostName());
System.out.println("ip.getHostAddress()= "+ ip.getHostAddress()); System.out.println("ip.getHostName()="+ ip.getHostName()); System.out.println("ip.toString()="+ ip.toString()); System.out.println("ip.isReachable(5000)="
+ ip.isReachable(5000));
}catch(UnknownHostException e){
e.printStackTrace();}catch(Exception e){
e.printStackTrace();
}
}
}
运行结果
上述代码分别获取本机、指定域名以及指定 IP地址的InetAddress对象。其中,调用 getLocalHostO可以获取本机InetAddress对象;调用getByName()可以获取指定域名的 InetAddress对象;
调用getByAddress()可以获取指定IP地址的InetAddress对象,该方法的参数使用字节数组存放IP地址。也可以直接通过 getByName()获取指定IP地址的InetAddress对象,此时IP地址作为字符串即可,即下面两个语句是等价的
InetAddress ip = InetAddress.getByAddress(new byte[]{127,0,0,1});
// InetAddress ip = InetAddress.getByName("127.0.0.1");