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

public String getHostAddress()
无论InetAddress对象是使用哪种方式创建的,getHostAddress方法都不会访问DNS服务器。如果想访问使用IPv6地址的远程主机,需要在操作系统上安装IPv6协议。下面是Windows 2003上安装IPv6协议的步骤:
第一步:打开“本地连接”属性对话框。如图1所示。

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

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

图2  “选择网络协议”对话框
除了使用图形化界面来安装IPv6外,还可以使用如下命令行来安装IPv6:
netsh interface ipv6 install
下面的代码演示了如何利用getHostAddress得到IPv4和IPv6地址,以及如何得到本机的所有IP地址(包括IPv4和IPv6地址)。
package mynet;

import java.net.*;

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

在上面代码中使用了www.neu6.edu.cn作为域名,这个域名是东北大学用于测试IPv6地址的域名。下面是其他一些可用于测试IPv6的域名,读者可以使用ping命令或例程3-9来测试这些域名。
www6.whu.edu.cn (武汉大学)
www.jlu6.edu.cn(吉林大学)
www6.usst.edu.cn(上海理工大学)
www.fudan6.edu.cn(复旦大学)
在访问这些域名之前,本机必须使用上述的方法或命令行安装IPv6,否则getByName方法将抛出UnknownHostException异常。
运行结果:
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地址
netsh interface ipv6 add address "本地连接" aa:bb::cc
删除IPv6
netsh interface ipv6 uninstall
注意:安装IPv6不需要重新启动计算机,但添加IPv6地址或删除IPv6后,必须重新启动计算机才能生效。

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

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

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

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

  1. java消息头,Java网络编程从入门到精通:HTTP消息头字段

    Java网络编程从入门到精通:HTTP消息头字段 一.通用头字段 1. Connection 这个字段只在HTTP1.1协议中存在.它决定了客户端和服务器进行了一次会话后, 服务器是否立即关闭网络连接 ...

  2. Java网络编程从入门到精通 (9):使用isXxx方法判断地址类型

     IP地址分为普通地址和特殊地址.在前面的文章中所使用的大多数都是普通的IP地址,在本文中将介绍如何利用InetAddress类提供的十个方法来确定一个IP地址是否是一个特殊的IP地址. 一.isAn ...

  3. Java网络编程从入门到精通(1):Internet地址概述

    所有连入Internet的终端设备(包括计算机.PDA.打印机以及其他的电子设备)都有一个唯一的索引,这个索引被称为IP地址.现在Internet上的IP地址大多由四个字节组成,这种IP地址叫做IPv ...

  4. Java网络编程从入门到精通(25):创建ServerSocket对象

    ServerSocket类的构造方法有四种重载形式,它们的定义如下: public ServerSocket() throws IOException public ServerSocket(int  ...

  5. Java网络编程从入门到精通(4):DNS缓存

    在通过DNS查找域名的过程中,可能会经过多台中间DNS服务器才能找到指定的域名,因此,在DNS服务器上查找域名是非常昂贵的操作.在Java中为了缓解这个问题,提供了DNS缓存.当InetAddress ...

  6. Java网络编程从入门到精通(2):创建InetAddress对象的四个静态方法

    InetAddress类是Java中用于描述IP地址的类.它在java.net包中.在Java中分别用Inet4Address和Inet6Address类来描述IPv4和IPv6的地址.这两个类都是I ...

  7. Java网络编程从入门到精通(3):为什么不能直接通过IP访问网站

     在<创建InetAdrress对象的四个静态方法>一文中通过getAllByName得到了www.csdn.net对应的四个IP地址.从理论上说,在IE(或其他的Web浏览器,如Fire ...

  8. Java网络编程从入门到精通(5):使用InetAddress类的getHostName方法获得域名

    该方法可以得到远程主机的域名,也可以得到本机名.getHostName方法的定义如下: public String getHostName() 下面是三种创建InetAddress对象的方式,在这三种 ...

  9. Java网络编程从入门到精通(14):多种多样的建立网络连接的方式

    在上一篇文章中我们讨论了Socket类的基本用法,并给出的例子中使用Socket类连接服务器时使用了一种最简单的连接方式,也就是通过IP和端口号来连接服务器.而为了使连接服务器的方式更灵活,Socke ...

最新文章

  1. 8种最有可能在2016年倒闭的光伏企业
  2. php上传过滤,编写PHP脚本过滤用户上传的图片_PHP
  3. Java锁 优先级_详解Java的线程的优先级以及死锁
  4. linux rm命令参数及用法详解---linux删除文件或目录命令
  5. 理解ATL中的一些汇编代码
  6. PWN-PRACTICE-BUUCTF-18
  7. Jdk14 都要出了,Jdk9 的新特性还不了解一下?
  8. C++自学-默认参数的函数
  9. 吴恩达深度学习——神经网络基础
  10. android 9.0 开机动画,小米9开机动画安装器
  11. 利用oc门或od门实现线与_OC门电路和OD门电路原理
  12. Google play谷歌应用商店 APP上包上架的一些策略和技巧
  13. 转|函数零点问题考点透视
  14. 个人时间和任务管理工具GTD大盘点!你适合哪一款?
  15. 数学模型——数学与人类文明的桥梁
  16. Android network框架分析之NetworkManagementService和netd交互深入分析(二)
  17. 前端性能测试 WebPagetest功能
  18. 十进制转换成二进制 (栈)
  19. 群控系统服务器掉线,手机群控系统安装调试问题汇总以及解决办法
  20. 汽车UDS诊断详解及Vector相关工具链使用说明——2.1.3 初步了解CDD(以10服务为例)

热门文章

  1. 深度解析Java8 – AbstractQueuedSynchronizer的实现分析(下)
  2. 我的MYSQL学习心得(一)
  3. linux系统中各个文件描述——陆续添加
  4. Oracle 11g 新特性 -- 自动诊断资料档案库(ADR) 说明
  5. 【转】DOS下文件传输---初识TCP网络编程改版
  6. 验证码 -图形图像识别的算法。http://blog.csdn.net/xtalk2008/archive/2007/11/01/1861310.aspx...
  7. c++中 结构体和类的区别
  8. appsetting 和connectionString 的区别。
  9. python怎么读取xls文件_python 怎样读取xls文件内容
  10. 如何用git上传文件