网路程序的第一步通常是从网址信息的处理开始,这很容易理解,如果连网址都无法取得,更别谈网路连线了。
java.net.InetAddress类可用来包装与进行网址处理的相关操作,它要有几个静态方法传回InetAddress对象:
public static InetAddress InetAddress.getLocalHost()
public static InetAddress InetAddress.getByName(String hostname)
public static InetAddress[] InetAddress.getAllByName(String hostname)
InetAddress主要包括两个栏位(field),即名称与位址,名称即像是www.caterpillar.onlyfun.net这样的名称,
而位址则是IP位址,我们可以使用getHostName()与getHostAddress()方法分别取得这两个信息。
getLocalhost()可以取得本机网址信息,下面这个简单的程序即可显示本机名称与位址:
package onlyfun.caterpillar;
import java.net.*;
public class Host { public static void main(String[] args) { try { InetAddress address = InetAddress.getLocalHost(); System.out.println(address); System.out.printf("HostName: %s%n", address.getHostName()); System.out.printf("HostAddress: %s%n", address.getHostAddress()); } catch (UnknownHostException e) { e.printStackTrace(); } } }
执行结果:
caterpillar-PC/192.168.1.23
HostName: caterpillar-PC
HostAddress: 192.168.1.23
|
下面的程序也很简单,可以指定查询远端主机的名称与IP位址:
package onlyfun.caterpillar;
import java.net.*;
public class Host { public static void main(String[] args) { try { InetAddress address = InetAddress.getByName(args[0]); System.out.println(address); System.out.printf("HostName: %s%n", address.getHostName()); System.out.printf("HostAddress: %s%n", address.getHostAddress()); } catch (UnknownHostException e) { e.printStackTrace(); } } }
执行结果:
java onlyfun.caterpillar.Host caterpillar.onlyfun.net
caterpillar.onlyfun.net/64.22.69.61
HostName: caterpillar.onlyfun.net
HostAddress: 64.22.69.61
|
有的网站上可能拥有不止一个的IP位址,可以使用getAllByName()方法取回所有的网址信息,这会传回InetAddress对象数组,可以使用循环将这些对象一一取出,下面的程序是一个简单的示范:
package onlyfun.caterpillar;
import java.net.*;
public class Host { public static void main(String[] args) { try { InetAddress[] addresses = InetAddress.getAllByName(args[0]); for(int i = 0; i < addresses.length; i++) System.out.println(addresses[i]); } catch(UnknownHostException e) { e.printStackTrace(); } } }
执行结果:
java onlyfun.caterpillar.Host cnn.com
cnn.com/64.236.16.20
cnn.com/64.236.16.52
cnn.com/64.236.24.12
cnn.com/64.236.29.120
|
|