Java网络编程从入门到精通(7):用getHostAddr

系统 1704 0

本文为原创,如需转载,请注明作者和出处,谢谢!

上一篇: Java网络编程从入门到精通(6):使用getCanonicalHostName方法获得主机名

这个方法用来得到主机的 IP 地址,这个 IP 地址可能是 IPv4 的地址,也可能是 IPv6 的地址。 getHostAddress 方法的定义如下:

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --> public StringgetHostAddress()

无论 InetAddress 对象是使用哪种方式创建的, getHostAddress 方法都不会访问 DNS 服务器。如果想访问使用 IPv6 地址的远程主机,需要在操作系统上安装 IPv6 协议。下面是 Windows 2003 上安装 IPv6 协议的步骤:

第一步: 打开 本地连接 属性对话框。如图1所示

图1 “本地连接”属性对话框


第二步: 点击 安装 按钮,出现 选择网络组件类型 对话框,选择 协议 选项后,点击 添加 按钮,出现如图 2 选择网络协议 对话框,选择 “Microsoft TCP/IP 版本 6” ,最后点击 确定 按钮。

图2 “选择网络协议”对话框

除了使用图形化界面来安装 IPv6 外,还可以使用如下命令行来安装 IPv6

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --> netshinterfaceipv6install

下面的代码 演示了如何利用 getHostAddress 得到 IPv4 IPv6 地址,以及如何得到本机的所有 IP 地址(包括 IPv4 IPv6 地址)。

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --> package mynet;

import java.net. * ;

public class MyIP
{
public static void main(String[]args) throws Exception
{
// 输出IPv4地址
InetAddressipv4Address1 = InetAddress.getByName( " 1.2.3.4 " );
System.out.println(
" ipv4Address1: " + ipv4Address1.getHostAddress());
InetAddressipv4Address2
= InetAddress.getByName( " www.ibm.com " );
System.out.println(
" ipv4Address2: " + ipv4Address2.getHostAddress());
InetAddressipv4Address3
= InetAddress.getByName( " myuniverse " );
System.out.println(
" ipv4Address3: " + ipv4Address3.getHostAddress());
// 输出IPv6地址
InetAddressipv6Address1 = InetAddress.getByName( " abcd:123::22ff " );
System.out.println(
" ipv6Address1: " + ipv6Address1.getHostAddress());
InetAddressipv6Address2
= InetAddress.getByName( " www.neu6.edu.cn " );
System.out.println(
" ipv6Address2: " + ipv6Address2.getHostAddress());
// 输出本机全部的IP地址
InetAddressAddresses[] = InetAddress.getAllByName( " myuniverse " );
for (InetAddressaddress:Addresses)
System.out.println(
" 本机地址: " + address.getHostAddress());
}
}

在上面代码 使用了 www.neu6.edu.cn 作为域名,这个域名是东北大学用于测试 IPv6 地址的域名。下面是其他一些可用于测试 IPv6 的域名,读者可以使用 ping 命令或例程 3-9 来测试这些域名。

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --> www6.whu.edu.cn(武汉大学)
www.jlu6.edu.cn(吉林大学)
www6.usst.edu.cn(上海理工大学)
www.fudan6.edu.cn(复旦大学)

在访问这些域名之前,本机必须使用上述的方法或命令行安装 IPv6 ,否则 getByName 方法将抛出 UnknownHostException 异常。

运行结果:

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --> ipv4Address1: 1.2.3.4
ipv4Address2:
129.42.60.212
ipv4Address3:
192.168.18.10
ipv6Address1:abcd:
123 : 0 : 0 : 0 : 0 : 0 :22ff
ipv6Address2:
2001 :da8: 9000 :b255: 200 :e8ff:feb0:5c5e
本机地址:
192.168.18.10
本机地址:
192.168.83.1
本机地址:
192.168.189.1
本机地址:
193.10.10.10
本机地址:
0 : 0 : 0 : 0 : 0 : 0 : 0 : 1

在上面的运行结果中的 IP 地址 192.168.18.10 192.10.10.10 是和本机网卡绑定的两个 IP ,而 192.168.83.1 192.168.189.1 VMware 虚拟机软件在本机安装的两个虚拟网卡的地址。最后一个 IPv6 地址 0:0:0:0:0:0:0:1 是代表本机的 IPv6 网址,相当于 IPv4 地址的 127.0.0.1 。读者可以使用如下命令行添加 IPv6 地址和删除 IPv6

添加 IPv6 地址

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --> netshinterfaceipv6addaddress " 本地连接 " aa:bb::cc

删除 IPv6

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --> netshinterfaceipv6uninstall

注意:安装IPv6不需要重新启动计算机,但添加IPv6地址或删除IPv6后,必须重新启动计算机才能生效。

下一篇: Java网络编程从入门到精通(8):用getAddress方法获得IP地址

国内最棒的Google Android技术社区(eoeandroid),欢迎访问!

《银河系列原创教程》 发布

《Java Web开发速学宝典》 出版,欢迎定购

Java网络编程从入门到精通(7):用getHostAddress方法获得IP地址


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论