三、getAllByName方法 使用getAllByName方法可以从DNS上得到域名对应的所有的IP.这个方法返回一个InetAddress类型的数组。这个方法的定义如下:
public static InetAddress[] getAllByName(String host) throws UnknownHostException
与getByName方法一样,当host不存在时,getAllByName也会抛出UnknowHostException异常,getAllByName也不会验证IP地址是否存在。下面的代码演示了getAllByName的用法:
package inet;
import java.net.*;
public class MyInetAddress3
{
public static void main(String[] args) throws Exception
{
if (args.length == 0)
return;
String host = args[0];
InetAddress addresses[] = InetAddress.getAllByName(host);
for (InetAddress address : addresses)
System.out.println(address);
}
}
测试1:远程主机www.csdn.net
执行如下命令:
java inet.MyInetAddress3 www.csdn.net
运行结果:
www.csdn.net/211.100.26.124
www.csdn.net/211.100.26.121
www.csdn.net/211.100.26.122
www.csdn.net/211.100.26.123
将上面的运行结果和例程3-2的测试1的运行结果进行比较,可以得出一个结论,getByName方法返回的IP地址就是getAllByName方法返回的第一个IP地址。事实上,getByName的确是这样实现的,getByName的实现代码如下:
public static InetAddress getByName(String host) throws UnknownHostException
{
return InetAddress.getAllByName(host)[0];
}
测试2:使用www.csdn.net的一个IP
执行如下命令:
java inet.MyInetAddress3 211.100.26.122
运行结果:
/211.100.26.122
四、getByAddress方法 这个方法必须通过IP地址来创建InetAddress对象,而且IP地址必须是byte数组形式。getByAddress方法有两个重载形式,定义如下:
public static InetAddress getByAddress(byte[] addr) throws UnknownHostException
public static InetAddress getByAddress(String host, byte[] addr) throws UnknownHostException
第一个重载形式只需要传递byte数组形式的IP地址,getByAddress方法并不验证这个IP地址是否存在,只是简单地创建一个 InetAddress对象。addr数组的长度必须是4(IPv4)或16(IPv6),如果是其他长度的byte数组,getByAddress将抛出一个UnknownHostException异常。第二个重载形式多了一个host,这个host和getByName、getAllByName方法中的host的意义不同,getByAddress方法并不使用host在DNS上查找IP地址,这个host只是一个用于表示addr的别名。下面的代码演示了getByAddress的两个重载形式的用法:
package inet;
import java.net.*;
public class MyInetAddress4
{
public static void main(String[] args) throws Exception
{
byte ip[] = new byte[] { (byte) 141, (byte) 146, 8 , 66};
InetAddress address1 = InetAddress.getByAddress(ip);
InetAddress address2 = InetAddress.getByAddress("Oracle官方网站", ip);
System.out.println(address1);
System.out.println(address2);
}
}
上面代码的运行结果如下:
/141.146.8.66
Oracle官方网站/141.146.8.66
从上面的运行结果可以看出,getByAddress只是简单地将host参数作为域名放到“/”前面,因此,host可以是任何字符串。
上一页 [1] [2]
责任编辑:小草