一、getHostName() 方法

    定义:public String getHostName()

    根据创建InetAddress对象的不同方式,getHostName的返回值是不同的。

1. 用 getLocalHost() 方法创建的InetAddress的对象

此时getHostName返回的是本机名

InetAddress address=InetAddress.getLocalHost();

System.out.println(address.getHostName());//返回本机名

2. 用域名创建 InetAddress对象

用域名作为getByName和getAllByName方法的参数得到的InetAddress对象,该对象会得到这个域名,当调用

getHostName时,就无需再访问DNS服务器,而是直接将这个域名返回

Java代码  

  1. InetAddress address=InetAddress.getByName("ZZQ");

  2. System.out.println(address.getHostName());//不必再访问DNS服务器,直接返回域名

3. 用IP地址 创建InetAddress对象

使用IP地址创建InetAddress对象(getByName,getAllByName,getByAddress方法都可以通过IP地址创建InetAddress对象)时,并不需要访问DNS服务器。因此,通过DNS服务器查找域名的工作就由getHostName方法来完成。

如果IP地址不存在或DNS服务器不允许进行IP地址和域名映射,就返回这个IP地址。

Java代码  

  1. InetAddress address=InetAddress.getByName("141.146.8.66");

  2. System.out.println(address.getHostName());//需要访问DNS服务器才能得到域名

  3. InetAddress address=InetAddress.getByName("1.2.3.4");//IP地址不存在

  4. System.out.println(address.getHostName());//直接返回IP地址

二、getCanonicalHostName()方法

    定义:public String getCanonicalHostName()

该方法和getHostName方法一样,也是得到远程主机的域名。区别是,该方法得到的是主机名,getHostName得到的是主机别名。

1. 使用 getLocalHost() 创建InetAddress对象

此时getCanonicalHostName方法和getHostName方法得到的都是本机名

2. 使用域名 创建InetAddress对象

使用域名创建InetAddress对象后,getHostName方法不会访问DNS服务器

但getCanonicalHostName方法就不一定了,这取决于DNS服务器如何解释主机名和主机别名

3. 使用IP地址 创建InetAddress对象

此时getCanonicalHostName方法和getHostName方法完全相同,返回的都是主机名,而不是主机别名。

之所以要使用主机别名,是因为有时主机名可能比较复杂,如Oracle官方网站的主机名bigip-otn-

portal.oracle.com,因此,为了使用户访问网站更方便,就增加了更简单的主机别名,如 www.oracle.com

三、getHostAddress()方法

    定义:public String getHostAddress()

该方法用来得到主机的IP地址,这个IP地址可以是IPv4也可以是IPv6的

无论InetAddress对象是用哪种方式创建,getHostAddress方法都不会访问DNS服务器。

Java代码  

  1. public static void getHostAddressTest() throws UnknownHostException {

  2. // 输出IPv4地址

  3. InetAddress ipv4Address1 = InetAddress.getByName("1.2.3.4");

  4. System.out.println("ipv4Address1:" + ipv4Address1.getHostAddress());

  5. //ipv4Address1:1.2.3.4

  6. InetAddress ipv4Address2 = InetAddress.getByName("www.ibm.com");

  7. System.out.println("ipv4Address2:" + ipv4Address2.getHostAddress());

  8. //ipv4Address2:129.42.60.216

  9. InetAddress ipv4Address3 = InetAddress.getByName("ZZQ");

  10. System.out.println("ipv4Address3:" + ipv4Address3.getHostAddress());

  11. //ipv4Address3:192.168.1.105

  12. // 输出IPv6地址

  13. InetAddress ipv6Address1 = InetAddress.getByName("abcd:123::22ff");

  14. System.out.println("ipv6Address1:" + ipv6Address1.getHostAddress());

  15. //ipv6Address1:abcd:123:0:0:0:0:0:22ff

  16. InetAddress ipv6Address2 = InetAddress.getByName("www.neu6.edu.cn");

  17. System.out.println("ipv6Address2:" + ipv6Address2.getHostAddress());

  18. //ipv6Address2:2001:da8:9000:b255:210:5cff:fef5:ac49

  19. // 输出本机全部的IP地址

  20. InetAddress Addresses[] = InetAddress.getAllByName("ZZQ");

  21. for (InetAddress address : Addresses)

  22. System.out.println("本机地址:" + address.getHostAddress());

  23. //本机地址:192.168.1.105

  24. //本机地址:0.1.0.4

  25. //本机地址:0:0:0:0:0:0:0:1

  26. }

四、getAddress()方法

    定义:public byte[] getAddress()

该方法和getHostAddress方法唯一区别是,getHostAddress返回字符形式的IP地址,getAddress返回byte数组形式的IP地址。

Java代码  

  1. public static void getAddressTest() throws UnknownHostException {

  2. InetAddress address = InetAddress.getByName("www.csdn.net");

  3. byte ip[] = address.getAddress();

  4. for (byte ipSegment : ip)

  5. System.out.print(ipSegment + ".");

  6. System.out.println("");

  7. //-53.81.21.61

  8. /*

  9. * byte数组是有符号的。在Java中byte类型的取值范围是-128~127.

  10. * 如果返回的IP地址的某个字节是大于127的整数,在byte数组中就是负数。

  11. * 由于Java中没有无符号byte类型,因此,要想显示正常的IP地址,必须使用int或long类型。

  12. */

  13. for (byte ipSegment : ip) {

  14. int newIPSegment = (ipSegment < 0) ? 256 + ipSegment : ipSegment;

  15. System.out.print(newIPSegment + ".");

  16. }

  17. //203.81.21.61

  18. }

转载于:https://blog.51cto.com/7139099/1665806

InetAddress类的一些方法相关推荐

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

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

  2. [java语言]——InetAddress类的getByName()方法

    InetAddress---表示互联网协议(IP)地址 ---InetAddress.getByName("www.163.com")----在给定主机名的情况下确定主机的IP地址 ...

  3. 【Java网络编程】获得实验室局域网中所有开机主机名称和IP地址,InetAddress类,在java中如何获取IP地址的方法

    获得实验室所有主机的IP地址和主机名 一.InetAddress类 二.获得指定IP地址和主机名的主要方法以及练习 1.主要方法 2.源码 三.获得实验室局域网中所有开机主机名称和IP地址 1.源码 ...

  4. Java网络编程之IP地址和InetAddress类

    Java语言的优势之一是Java程序能访问网络资源.Java提供一系列的类支持Java程序访问网络资源. TCP/IP协议和IP地址 为了进行网络通信,通信双方必须遵守通信协议.目前最广泛使用的是TC ...

  5. Java Graphics2D类的绘图方法

    Java语言在Graphics类提供绘制各种基本的几何图形的基础上,扩展Graphics类提供一个Graphics2D类,它拥用更强大的二维图形处理能力,提供.坐标转换.颜色管理以及文字布局等更精确的 ...

  6. Java Graphics类的绘图方法

    Graphics类提供基本绘图方法,Graphics2D类提供更强大的绘图能力.本节讲解Graphics类,下节讲解Graphics2D. Graphics类提供基本的几何图形绘制方法,主要有:画线段 ...

  7. Java 利用InetAddress类确定特殊Ip地址

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

  8. java ip吸附_IP层的封装(Java的InetAddress类的C++实现)

    IP 层的封装 C++ 通用框架的设计 作者: naven 1 IP 层封装介绍 TCP/UDP 是网络编程的基础技术,分别代表面向连接的稳定的网络通信技术和非连接方式的广播形式的网络通信技术,它们都 ...

  9. Java使用InetAddress类获取主机名和IP地址

    1.在Java中,地址可以由一个字符串来定义,这个字符串可以是数字型的地址(其中IPv4的地址型式为:192.168.72.1,其中IPv6的地址型式为:fe20:12a0::0abc:1234),也 ...

最新文章

  1. 快速提高你的UI设计水平的一些小技巧
  2. 9 个实用 shell 脚本,建议收藏!
  3. c++强大还是python强大-2020,你该学习Python还是C++
  4. mysql 函数substring_index()
  5. python 对象的异或运算符_python的运算符
  6. 无线网状网、Zigbee、RFID三种技术分析
  7. UMEditor上传图片配置
  8. 文青不适合看的电影《雪国列车》
  9. varnish几个工具命令行工作情况
  10. input之question
  11. 程序员该面向运维,还是面向开发?
  12. [译] RxJava 中的错误处理
  13. 【Python】Python3.9又更新了:dict内置新功能,正式版十月见面
  14. Consul:网络坐标
  15. 如何在Microsoft Outlook中使用Gmail
  16. 播放器无法挂载.VTT文件字幕(Coursera)
  17. Jquery实现淘宝服饰精品案例
  18. java知识体系综合面试题
  19. python切片是什么意思_python切片的理解
  20. Ubuntu 小企鹅输入法fcitx安装及设置

热门文章

  1. 64位系统识别内存 服务器,服务器内存和电脑内存的区别
  2. 2021年春季学期-信号与系统-第十次作业参考答案-第一小题
  3. 你曾经是那手握烙铁的少年
  4. 新车模、新舵机、新体验
  5. c语言整形提升规则,C语言进阶:整型提升
  6. java6.2免费下载_jasperreports(Java开源报表系统)
  7. antd 能自适应吗_ACC自适应巡航能当自动驾驶用吗?答:不能
  8. win10应用商店打不开_电脑打不开exe程序|Win10提示exe不是有效32应用程序
  9. mysql declare与set的区别_浅谈MySQL存储过程中declare和set定义变量的区别
  10. android unity 关闭应用_在后台运行的Android Unity应用程序