
4.1.4 因特网地址
通常,不用过多考虑因特网地址的问题,它们是用一串数字表示的主机地址,一个因特网地址由4个字节组成(在IPv6中是16个字节),比如129.6.15.28。但是,如果需要在主机名和因特网地址之间进行转换,那么就可以使用InetAddress类。
只要主机操作系统支持IPv6格式的因特网地址,java.net包也将支持它。
静态的getByName方法可以返回代表某个主机的InetAddress对象。例如,

将返回一个InetAddress对象,该对象封装了一个4字节的序列:129.6.15.28。然后,可以使用getAddress方法来访问这些字节:

一些访问量较大的主机名通常会对应于多个因特网地址,以实现负载均衡。例如,在撰写本书时,主机名google.com就对应着12个不同的因特网地址。当访问主机时,会随机选取其中的一个。可以通过调用getAllByName方法来获得所有主机:

最后需要说明的是,有时我们可能需要本地主机的地址。如果只是要求得到localhost的地址,那总会得到本地回环地址127.0.0.1,但是其他程序无法用这个地址来连接到这台机器上。此时,可以使用静态的getLocalHost方法来得到本地主机的地址:

程序清单4-2是一段比较简单的程序代码。如果不在命令行中设置任何参数,那么它将打印出本地主机的因特网地址。反之,如果在命令行中指定了主机名,那么它将打印出该主机的所有因特网地址,例如:

程序清单4-2 inetAddress/InetAddressTest.java

java.net.InetAddress 1.0
·static InetAddress getByName(String host)
·static InetAddress[]getAllByName(String host)
为给定的主机名创建一个InetAddress对象,或者一个包含了该主机名所对应的所有因特网地址的数组。
·static InetAddress getLocalHost()
为本地主机创建一个InetAddress对象。
·byte[]getAddress()
返回一个包含数字型地址的字节数组。
·String getHostAddress()
返回一个由十进制数组成的字符串,各数字间用圆点符号隔开,例如,“129.6.15.28”。
·String getHostName()
返回主机名。