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 block
e.printStackTrace();
}
}
}
(2)运行此类,控制台输出如下:
这里我把IP地址给涂鸦了,请见谅!大家可以自己在机子上实验一下!
其中我还写了其他的测试代码,下载地址:http://download.csdn.net/download/u012561176/9074737
4.以上内容仅供大家学习参考,写得不好,请见谅,如有错误,请指出,谢谢!