为了区分IPv和IPv地址Java提供了两个类InetAddress和InetAddress它们都是InetAddress类的子类这两个类的定义如下
publicfinalclassInetAddressextendsInetAddress
publicfinalclassInetAddressextendsInetAddress
这两个类分别按着IPv和IPv的规则实现了InetAddress类中的public方法它们所不同的是InetAddress类比InetAddress类多了一个方法isIPvCompatibleAddress这个方法用来判断一个IPv地址是否和IPv地址兼容和IPv兼容的IPv地址除了最后四个字节有值名其他的字节都是如ABCDFAFA都是和IPv兼容的IPv地址
当使用InetAddress类的四个静态方法创建InetAddress对象后可以通过getAddress返回的byte数组来判断这个IP地址是IPv还是IPv地址(byte数组长度为就是IPv地址byte数组长度为就是IPv地址)也可以将instanceof来确定InetAddress对象是它的哪个子类的实例下面的代码演示了如何判断一个IP地址是IPv还是IPv地址
package mynet;
import*;
publicclass MyIP
{
publicstaticvoidmain(String[]args)throwsException
{
if(argslength==)
return;
InetAddressaddress=InetAddressgetByName(args[]);
Systemoutprintln(IP:+addressgetHostAddress());
switch(addressgetAddress()length)
{
case:
Systemoutprintln(根据byte数组长度判断这个IP地址是IPv地址!);
break;
case:
Systemoutprintln(根据byte数组长度判断这个IP地址是IPv地址!);
break;
}
if(addressinstanceofInetAddress)
Systemoutprintln(使用instanceof判断这个IP地址是IPv地址!);
elseif(addressinstanceofInetAddress)
Systemoutprintln(使用instanceof判断这个IP地址是IPv地址!);
}
}
测试
执行如下命令
javamynetMyIP
运行结果
IP:
根据byte数组长度判断这个IP地址是IPv地址!
使用instanceof判断这个IP地址是IPv地址!
测试
执行如下命令
javamynetMyIP
运行结果
IP::da::b::eff:feb:ce
根据byte数组长度判断这个IP地址是IPv地址!
使用instanceof判断这个IP地址是IPv地址!