![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=1739198518-qyd8TfVmoiNA1KVfhnVFrLvhAV2APqN9-0-1372f093799217c1b17338d5e2ba60d5)
将返回一个InetAddress对象,该对象封装了一个4字节的序列:129.6.15.28。然后,可以使用getAddress方法来访问这些字节:
![](https://epubservercos.yuewen.com/F21227/18365861501241106/epubprivate/OEBPS/Images/196-2-i.jpg?sign=1739198518-QRrefKEMSR25ICX7oQUl3bDdprAUdhXn-0-141abca60caf6b7ac9ddfb3166d6d303)
一些访问量较大的主机名通常会对应于多个因特网地址,以实现负载均衡。例如,在撰写本书时,主机名google.com就对应着12个不同的因特网地址。当访问主机时,会随机选取其中的一个。可以通过调用getAllByName方法来获得所有主机:
![](https://epubservercos.yuewen.com/F21227/18365861501241106/epubprivate/OEBPS/Images/196-3-i.jpg?sign=1739198518-kZ1MHkh6rd1Dz5baH3RuiP1lvwMM8vI3-0-9135613ae8eaf445579656cdfa90dac2)
最后需要说明的是,有时我们可能需要本地主机的地址。如果只是要求得到localhost的地址,那总会得到本地回环地址127.0.0.1,但是其他程序无法用这个地址来连接到这台机器上。此时,可以使用静态的getLocalHost方法来得到本地主机的地址:
![](https://epubservercos.yuewen.com/F21227/18365861501241106/epubprivate/OEBPS/Images/196-4-i.jpg?sign=1739198518-F66xELoG8da6L8LqpoYTmD0WRZ1IFWFu-0-4ead3523c0308b6f62c8c7dc98a676c4)
程序清单4-2是一段比较简单的程序代码。如果不在命令行中设置任何参数,那么它将打印出本地主机的因特网地址。反之,如果在命令行中指定了主机名,那么它将打印出该主机的所有因特网地址,例如:
![](https://epubservercos.yuewen.com/F21227/18365861501241106/epubprivate/OEBPS/Images/197-i.jpg?sign=1739198518-MJs4SZnstEaGAesuRoNG6Jht5F8k5xIt-0-4e18c26cc9c9d345ea1e4ee88059bfb1)
程序清单4-2 inetAddress/InetAddressTest.java
![](https://epubservercos.yuewen.com/F21227/18365861501241106/epubprivate/OEBPS/Images/197-2-i.jpg?sign=1739198518-NApfBr78rEbbJRTOakVJntVmLnguj6nY-0-9918629dc7a5657903345ab0d57d8f1b)
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()
返回主机名。