Java InetAddress类
介绍
在Java网络编程中,InetAddress
类是一个非常重要的类,它代表互联网协议(IP)地址。无论是IPv4还是IPv6地址,在Java中都使用InetAddress
类来表示。这个类提供了将主机名解析为IP地址(或反之)的方法,是构建网络应用的基础。
InetAddress
类位于java.net
包中,它是一个抽象类,有两个子类:Inet4Address
(用于IPv4)和Inet6Address
(用于IPv6)。大多数情况下,我们不需要直接使用这两个子类,而是通过InetAddress
类的静态方法来获取实例。
InetAddress类的基本使用
获取InetAddress实例
InetAddress
类没有公共构造函数,我们需要通过其静态方法来创建实例。以下是常用的几种方法:
import java.net.InetAddress;
import java.net.UnknownHostException;
public class InetAddressDemo {
public static void main(String[] args) {
try {
// 通过主机名获取InetAddress实例
InetAddress address1 = InetAddress.getByName("www.example.com");
System.out.println("通过主机名获取: " + address1);
// 通过IP地址获取InetAddress实例
InetAddress address2 = InetAddress.getByName("192.168.1.1");
System.out.println("通过IP地址获取: " + address2);
// 获取本地主机的InetAddress实例
InetAddress localHost = InetAddress.getLocalHost();
System.out.println("本地主机: " + localHost);
} catch (UnknownHostException e) {
e.printStackTrace();
}
}
}
输出示例:
通过主机名获取: www.example.com/93.184.216.34
通过IP地址获取: /192.168.1.1
本地主机: your-computer-name/192.168.0.100
主要方法
InetAddress
类提供了许多有用的方法,下面列出一些常用的:
- 获取主机名和IP地址
InetAddress address = InetAddress.getByName("www.example.com");
// 获取主机名
String hostname = address.getHostName();
System.out.println("主机名: " + hostname);
// 获取主机地址(IP地址)
String hostAddress = address.getHostAddress();
System.out.println("IP地址: " + hostAddress);
- 检查可达性
InetAddress address = InetAddress.getByName("www.example.com");
// 检查主机是否可达(超时设置为5000毫秒)
boolean reachable = address.isReachable(5000);
System.out.println("主机是否可达: " + reachable);
- 获取全限定域名
InetAddress address = InetAddress.getByName("www.example.com");
// 获取全限定域名
String canonicalHostName = address.getCanonicalHostName();
System.out.println("全限定域名: " + canonicalHostName);
- 判断地址类型
InetAddress address = InetAddress.getByName("www.example.com");
// 检查是否是环回地址
boolean isLoopback = address.isLoopbackAddress();
System.out.println("是否为环回地址: " + isLoopback);
// 检查是否是链路本地地址
boolean isLinkLocal = address.isLinkLocalAddress();
System.out.println("是否为链路本地地址: " + isLinkLocal);