![Java核心技术·卷Ⅱ:高级特性(原书第10版)](https://wfqqreader-1252317822.image.myqcloud.com/cover/937/34339937/b_34339937.jpg)
4.1.4 因特网地址
通常,不用过多考虑因特网地址的问题,它们是用一串数字表示的主机地址,一个因特网地址由4个字节组成(在IPv6中是16个字节),比如129.6.15.28。但是,如果需要在主机名和因特网地址之间进行转换,那么就可以使用InetAddress类。
只要主机操作系统支持IPv6格式的因特网地址,java.net包也将支持它。
静态的getByName方法可以返回代表某个主机的InetAddress对象。例如,
![](https://epubservercos.yuewen.com/F21227/18365861501241106/epubprivate/OEBPS/Images/196-i.jpg?sign=1739360197-KQCmCsAYaaJThscyjrlEXCULYMYPhx7C-0-8b0ace0f0036be228ec14fcb16bd719f)
将返回一个InetAddress对象,该对象封装了一个4字节的序列:129.6.15.28。然后,可以使用getAddress方法来访问这些字节:
![](https://epubservercos.yuewen.com/F21227/18365861501241106/epubprivate/OEBPS/Images/196-2-i.jpg?sign=1739360197-cArwP6YFWcasGEBN9UhH7wZC4OOO9Z80-0-f20f9e566f7c07a25697627af6119654)
一些访问量较大的主机名通常会对应于多个因特网地址,以实现负载均衡。例如,在撰写本书时,主机名google.com就对应着12个不同的因特网地址。当访问主机时,会随机选取其中的一个。可以通过调用getAllByName方法来获得所有主机:
![](https://epubservercos.yuewen.com/F21227/18365861501241106/epubprivate/OEBPS/Images/196-3-i.jpg?sign=1739360197-OGer8EcXIWyEBbaPp3rbw3OLIzamZLHu-0-8419dc2d188fea7f017698e0f36d2a00)
最后需要说明的是,有时我们可能需要本地主机的地址。如果只是要求得到localhost的地址,那总会得到本地回环地址127.0.0.1,但是其他程序无法用这个地址来连接到这台机器上。此时,可以使用静态的getLocalHost方法来得到本地主机的地址:
![](https://epubservercos.yuewen.com/F21227/18365861501241106/epubprivate/OEBPS/Images/196-4-i.jpg?sign=1739360197-LCJWrWygN4mBcPztScqSvVSHp4Ye0D9o-0-f3f39455b82181c38b8b0633a582ef2b)
程序清单4-2是一段比较简单的程序代码。如果不在命令行中设置任何参数,那么它将打印出本地主机的因特网地址。反之,如果在命令行中指定了主机名,那么它将打印出该主机的所有因特网地址,例如:
![](https://epubservercos.yuewen.com/F21227/18365861501241106/epubprivate/OEBPS/Images/197-i.jpg?sign=1739360197-SeXQOdYDYKarKEsdX7rGBp1lzlr1lRrw-0-4bd42f120a8354530c9649f6c5f3c10e)
程序清单4-2 inetAddress/InetAddressTest.java
![](https://epubservercos.yuewen.com/F21227/18365861501241106/epubprivate/OEBPS/Images/197-2-i.jpg?sign=1739360197-difW6cW9B44SvPtC9Gil1QEQvGjeohyx-0-01b0419be52ca23ba58bdbb592fd677a)
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()
返回主机名。