Java网络编程从入门到精通(2):创建InetAddress对象的四个静态方法(二)

2014-11-24 00:05:11 · 作者: · 浏览: 1
{
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的两个重载形式的用