1.在Java中,地址可以由一个字符串来定义,这个字符串可以是数字型的地址(其中IPv4的地址型式为:192.168.72.1,其中IPv6的地址型式为:fe20:12a0::0abc:1234),也可以是主机名(如hh.gg.com)。主机名必须被解析成数字型地址才能用来进行通信。

2.InetAddress类代表了一个网络目标地址,包括主机名和数字类型的地址信息。该类有两个子类,Inet4Address和Inet6Address,分别对应了目前IP地址的两个版本。InetAddress
实例是不可变的,一旦创建,每个实例就始终指向同一个地址。

(1).学习一个类的方法可以查看API文档,InetAddress类位于java.net包下。

(2).下面我们来介绍一个如何实例化一个InetAddress类,因为此类无构造方法,所以实例化此类有以下几种静态方法:

— staticInetAddress getLocalHost() 方法,此方法返回一个InetAddress对象,用来返回本地主机,java代码如下:

InetAddress inetAddress=InetAddress.getLocalHost();

— static InetAddress getByName(String host) 方法,此方法返回一个InetAddress对象,用来在给定主机名的情况下确定主机的 IP 地址,java代码如下:

InetAddress inetAddress=InetAddress.getByName("Lc");

— static InetAddress getByAddress(byte[] addr) 方法,用来在给定原始IP地址得情况下,返回一个InetAddress对象,java代码如下:

InetAddress inetAddress=InetAddress.getByAddress(b);

其中的b为一个字节数组 ,参数按网络字节顺序:地址的高位字节位于 getAddress()[0] 中,IPv4 地址 byte 数组的长度必须为 4 个字节,IPv6 byte 数组的长度必须为 16 个字节。

— static InetAddress getByAddress(String host,byte[] addr) 方法, 根据提供的主机名和 IP 地址创建 InetAddress,java代码如下:

InetAddress inetAddress=InetAddress.getByAddress("Lc", b);

其中的b为一个字节数组,具体意思与上面的b一致。

(3).其中有另外此类有一个特殊的静态特殊方法:

static InetAddress[ ] getAllByName() 方法,在给定主机名的情况下,根据系统上配置的名称服务返回其 IP 地址所组成的数组,java代码如下:

InetAddress[] inetAddress=InetAddress.getAllByName("Lc");

(4).接下来附上此类的一些主要方法:

— toString() 方法,将此 IP 地址转换为 String

— byte[ ] getAddress() 方法,返回此 InetAddress 对象的原始 IP 地址。如果将此字节数组输出在控制台下,会出现一个存放此字节数组的内存地址。

— String getCanonicalName() 方法, 获取此 IP 地址的完全限定域名。

— String getHostAddress() 方法,返回 IP 地址字符串(以文本表现形式)。

— String getHostName() 方法,获取此 IP 地址的主机名。

— boolean isReachable(int timeout) 方法,测试是否可以达到该地址。

其他方法请自行查看API文档。

3.接下来附上一个例子,用来获取主机名及IP地址:

(1).新建一个包,为com.inetaddress包,在此包下新建一个Address类,代码如下:

package com.inetaddress;import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;public class Address {public static void main(String[] args) throws IOException{InetAddress inetAddress;//声明InetAddress对象try {inetAddress=InetAddress.getLocalHost();//实例化InetAddress对象,返回本地主机String hostName=inetAddress.getHostName();//获取本地主机名String canonicalHostName=inetAddress.getCanonicalHostName();//获取此 IP地址的完全限定域名byte[] address=inetAddress.getAddress();//获取原始IP地址int a=0;if(address[3]<0){a=address[3]+256;}String hostAddress=inetAddress.getHostAddress();//获取本地主机的IP地址boolean reachable=inetAddress.isReachable(2000);//获取布尔类型,看是否能到达此IP地址System.out.println(inetAddress.toString());System.out.println("主机名为:"+hostName);//输出本地主机名System.out.println("此IP地址的完全限定域名:"+canonicalHostName);//输出此IP地址的完全限定域名System.out.println("原始IP地址为:"+address[0]+"."+address[1]+"."+address[2]+"."+a);//输出本地主机的原始IP地址System.out.println("IP地址为:"+hostAddress);//输出本地主机的IP地址System.out.println("是否能到达此IP地址:"+reachable);} catch (UnknownHostException e) {// TODO Auto-generated catch blocke.printStackTrace();}}
}

上面的代码存在一点问题,就是获取原始IP地址时,返回的是一个字节数组,如果把这个字节输出到控制台下的话,会显示此字节数组在内存中的存放地址,所以我在输出时用了address[0]等数组的形式输出字节,其中如果字节数组中的某个字节大于128的话,将会导致输出来的数字是负数,应此我把我的IP地址中超过128的加上256,便没问题了,我的代码仅做测试,正常来说,要把字节数组转换为整型数据类型,再取出来。

(2)运行此类,控制台输出如下:

这里我把IP地址给涂鸦了,请见谅!大家可以自己在机子上实验一下!

其中我还写了其他的测试代码,下载地址:http://download.csdn.net/download/u012561176/9074737

4.以上内容仅供大家学习参考,写得不好,请见谅,如有错误,请指出,谢谢!




Java使用InetAddress类获取主机名和IP地址相关推荐

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

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

  2. java什么是网络接口_java 网络编程 -- IP地址的表示与网络接口信息的获取(InetAddress和NetworkInterface)...

    使用java进行网络程序的开发,可以说是一件令人愉悦的事情,对于用惯了C++网络接口编程的人来说,当他们首次使用Java开发网络应用程序,会发现java开发网络应用是如此的简单,甚至仅用几分钟时间,您 ...

  3. java获取dns_Java 根据网址查询DNS/IP地址的方法

    说明: 本文不涉及底层的 DNS 协议, 直接使用Java平台提供的API进行操作. DNS也就是 Domain Name Service,即 域名服务. 我们知道, Java中与网址有关的类包括 j ...

  4. Java技巧: 根据网址/域名查询DNS/IP地址

    需求: 给定一个URL地址, 例如: http://www.cncounter.com/tools/shorturl.php, 解析对应的IP地址和端口号. 说明: 本文不涉及底层的 DNS 协议, ...

  5. 百度云CDN获取回源IP地址的方法

    百度云CDN回源IP地址在哪获取?百度CDN回源IP需添加到云服务器白名单中,否则可能会导致CDN回源失败,码笔记来详细说下百度云CDN回源IP地址获取方法: 百度云CDN回源IP地址获取方法 1.  ...

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

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

  7. java之InetAddress类和InetSocketAddress的使用

    一.简介 InetAddress是Java对IP地址的封装,代表互联网协议(IP)地址: InetAddress对象的获取只能通过静态方法,比如根据主机名获取主机的ip地址封装对象: InetAddr ...

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

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

  9. java 获取linux mac_java在linux获得ip地址和mac

    以前在linux下获取ip和mac一般使用jni,调用linux的ioctl.当然也有使用shell获取的. 发现在jdk 6下已经实现了,java.net.NetworkInterface上面有静态 ...

最新文章

  1. java面试基础问题积累----多线程,并发
  2. 关于Lucene的自定义Sort排序
  3. Android 布局属性 Android:layout_weight 总结
  4. Linux CentOS 7【修改 屏幕(分辨率)大小】
  5. ALAssetsLibrary获取相册列表
  6. JQuery1.2.6 ui.dialog控件在IE6下标题栏显示不正常的问题解决
  7. 一文快速掌握IPv6基础知识及使用指南
  8. ShadeGraph教程之节点详解7:Utility Nodes
  9. java.lang.UnsupportedOperationException: null at java.util.AbstractList.add(AbstractList.java:148)
  10. 21天Jenkins打卡Day15项目复制
  11. Tensorflow:常见错误
  12. 【离散数学2】代数系统趣题
  13. RTI_DDS自定义插件开发 2 NDDS传输插件API
  14. PropertyUtils嵌套属性的使用
  15. 前端工程师未来发展方向
  16. js中text方法是啥意识_JavaScript | 文本节点Text常用方法
  17. u盘装机维护系统工具图文解说
  18. 小玩具:知识卡(RFID)
  19. mpg123源码详解
  20. JAVA8 BiConsumer 接口

热门文章

  1. Django:新手入门学习资料汇总
  2. 实验三 编程、编译、连接、跟踪
  3. php 使用fseek指针读取大文件日志
  4. AngularJS日期格式化
  5. 源码分析:Java对象的内存分配
  6. JS单曲调用百度mp3音乐播放器代码
  7. JavaScript表单序列化的方法详解
  8. [蓝桥杯历届试题] 国庆星期日
  9. MYSQL函数应用----替换函数replace()用法
  10. ★ Learn how you can use Adobe Creative Suite to create skins for Flex and AIR applications.