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