获取本地主机名和IP地址
InetAddress类表示网络地址。该类隶属于java.net包内。它有两个子类:
- Inet4Address
- Inet6Address
IP地址是IP使用的32位或128位无符号数字,它是一种低级协议。UDP和TCP协议都是在它的基础上构建的。
方法名 | 方法简介 | 返回类 |
---|---|---|
getLocalHost() | 返回本地主机。 | static Inet4Address |
getHostAddress() | 返回IP地址字符串。 | String |
getHostName() | 获取此IP地址的主机名。 | String |
getByAddress(byte[] addr) | 在给定原始IP地址的情况下。创建InetAddress对象 | InetAddress |
例:
public static void main(String[] args) throws UnknownHostException {
InetAddress i = Inet4Address.getLocalHost();
System.out.println(i.toString());
//获取IP地址
System.out.println(i.getHostAddress());
//获取主机名。
System.out.println(i.getHostName());
}
最后打印出来的是本地的主机名和地址。
获取任意一台主机IP地址
getByName(String hostname)方法,可以通过IP地址获取主机名。最后返回一个InetAddress对象。
public static void main(String[] args) throws UnknownHostException {
InetAddress ia = InetAddress.getByName("192.168.56.1");
System.out.println(ia.getHostAddress());
System.out.println(ia.getHostName());
}
如果IP地址和对应的主机名没有在网络上。IP地址可以找到,但主机名无法解析成功。此时getHostName返回的依然是IP地址。
getHostName(String name)的参数Name也可以是主机名,例如getHostName("www.google.com")。但是最好是输入IP地址,因为主机名-IP地址需要经过DNS解析。比较浪费时间。
public static void main(String[] args) throws UnknownHostException {
InetAddress ia = InetAddress.getByName("www.google.com");
System.out.println(ia.getHostAddress());
System.out.println(ia.getHostName());
}
由于Google主机服务器有多台,所以返回的IP地址不唯一。Google主机服务器也可能做了映射,使多个服务器使用一个IP地址。
有一个方法叫getAllByName(String hostname)。该方法返回一个InetAddress数组。该方法在给定主机名的情况下根据系统上配置的名称服务返回其IP地址所组成的数组。