InetAddress類是Java中用于描述IP地址的類。它在java.net包中。在Java中分別用Inet4Address和Inet6Address類來描述IPv4和IPv6的地址。這兩個類都是InetAddress的子類。由于 InetAddress沒有public的構(gòu)造方法,因此,要想創(chuàng)建InetAddress對象,必須得依靠它的四個靜態(tài)方法。InetAddress可以通過getLocalHost方法得到本機的InetAddress對象,也可以通過getByName、getAllByName和 getByAddress得到遠程主機的InetAddress對象。
一、getLocalHost方法
使用getLocalHost可以得到描述本機IP的InetAddress對象。這個方法的定義如下:
public static InetAddress getLocalHost() throws UnknownHostException
這個方法拋出了一個UnknownHostException異常,因此,必須在調(diào)用這個方法的程序中捕捉或拋出這個異常。下面的代碼演示了如何使用getLocalHost來得到本機的IP和計算機名。
package inet;
import java.net.*;
public class MyInetAddress1
{
public static void main(String[] args) throws Exception
{
InetAddress localAddress = InetAddress.getLocalHost();
System.out.println(localAddress);}
}
運行結(jié)果:
ComputerName/192.168.18.10
在InetAddress類中覆蓋了Object類的toString方法,實現(xiàn)如下:
public String toString()
{
return ((hostName != null) ? hostName : "") + "/" + getHostAddress();
}
從上面的代碼可以看出,InetAddress方法中的toString方法返回了用“/”隔開的主機名和IP地址。因此,在上面的代碼中直接通過 localAddress對象來輸出本機計算機名和IP地址(將對象參數(shù)傳入println方法后,println方法會調(diào)用對象參數(shù)的toString 方法來輸出結(jié)果)。
當本機綁定了多個IP時,getLocalHost只返回第一個IP.如果想返回本機全部的IP,可以使用getAllByName方法。
二、getByName方法
這個方法是InetAddress類最常用的方法。它可以通過指定域名從DNS中得到相應的IP地址。getByName一個String類型參數(shù),可以通過這個參數(shù)指定遠程主機的域名,它的定義如下:
public static InetAddress getByName(String host) throws UnknownHostException
如果host所指的域名對應多個IP,getByName返回第一個IP.如果本機名已知,可以使用getByName方法來代替 getLocalHost.當host的值是localhost時,返回的IP一般是127.0.0.1.如果host是不存在的域名,getByName將拋出UnknownHostException異常,如果host是IP地址,無論這個IP地址是否存在,getByName方法都會返回這個IP地址(因此getByName并不驗證IP地址的正確性)。下面代碼演示了如何使用getByName方法:
package inet;
import java.net.*;
public class MyInetAddress2
{
public static void main(String[] args) throws Exception
{
if (args.length == 0)
return;
String host = args[0];
InetAddress address = InetAddress.getByName(host);
System.out.println(address);
}
}
測試1:遠程主機www.csdn.net
執(zhí)行如下命令:
java inet.MyInetAddress2 www.csdn.net
運行結(jié)果:
www.csdn.net/211.100.26.124
測試2:本機名ComputerName
執(zhí)行如下命令:
java inet.MyInetAddress2 ComputerName
運行結(jié)果:
ComputerName/192.168.18.10
測試3:代表本機的localhost
執(zhí)行如下命令:
java inet.MyInetAddress2 localhost
運行結(jié)果:
localhost/127.0.0.1
對于本機來說,除了可以使用本機名或localhost外,還可以在hosts文件中對本機做“IP/域名”映射(在Windows操作系統(tǒng)下)。這個文件在C:\WINDOWS\system32\drivers\etc中。打開這兩個文件中,在最后加一行如下所示的字符串:
192.168.18.100 www.mysite.com
測試4:本機域名www.mysite.com
執(zhí)行如下命令:
java inet.MyInetAddress2 www.mysite.com
運行結(jié)果:
www.mysite.com/192.168.18.100
getByName方法除了可以使用域名作為參數(shù)外,也可以直接使用IP地址作為參數(shù)。如果使用IP地址作為參數(shù),輸出InetAddress對象時域名為空(除非調(diào)用getHostName方法后,再輸出InetAddress對象。getHostName方法將在下面的內(nèi)容介紹)。讀者可以使用 129.42.58.212作為MyInetAddress2的命令行參數(shù)(這是www.ibm.com的IP),看看會得到什么結(jié)果。
一、getLocalHost方法
使用getLocalHost可以得到描述本機IP的InetAddress對象。這個方法的定義如下:
public static InetAddress getLocalHost() throws UnknownHostException
這個方法拋出了一個UnknownHostException異常,因此,必須在調(diào)用這個方法的程序中捕捉或拋出這個異常。下面的代碼演示了如何使用getLocalHost來得到本機的IP和計算機名。
package inet;
import java.net.*;
public class MyInetAddress1
{
public static void main(String[] args) throws Exception
{
InetAddress localAddress = InetAddress.getLocalHost();
System.out.println(localAddress);}
}
運行結(jié)果:
ComputerName/192.168.18.10
在InetAddress類中覆蓋了Object類的toString方法,實現(xiàn)如下:
public String toString()
{
return ((hostName != null) ? hostName : "") + "/" + getHostAddress();
}
從上面的代碼可以看出,InetAddress方法中的toString方法返回了用“/”隔開的主機名和IP地址。因此,在上面的代碼中直接通過 localAddress對象來輸出本機計算機名和IP地址(將對象參數(shù)傳入println方法后,println方法會調(diào)用對象參數(shù)的toString 方法來輸出結(jié)果)。
當本機綁定了多個IP時,getLocalHost只返回第一個IP.如果想返回本機全部的IP,可以使用getAllByName方法。
二、getByName方法
這個方法是InetAddress類最常用的方法。它可以通過指定域名從DNS中得到相應的IP地址。getByName一個String類型參數(shù),可以通過這個參數(shù)指定遠程主機的域名,它的定義如下:
public static InetAddress getByName(String host) throws UnknownHostException
如果host所指的域名對應多個IP,getByName返回第一個IP.如果本機名已知,可以使用getByName方法來代替 getLocalHost.當host的值是localhost時,返回的IP一般是127.0.0.1.如果host是不存在的域名,getByName將拋出UnknownHostException異常,如果host是IP地址,無論這個IP地址是否存在,getByName方法都會返回這個IP地址(因此getByName并不驗證IP地址的正確性)。下面代碼演示了如何使用getByName方法:
package inet;
import java.net.*;
public class MyInetAddress2
{
public static void main(String[] args) throws Exception
{
if (args.length == 0)
return;
String host = args[0];
InetAddress address = InetAddress.getByName(host);
System.out.println(address);
}
}
測試1:遠程主機www.csdn.net
執(zhí)行如下命令:
java inet.MyInetAddress2 www.csdn.net
運行結(jié)果:
www.csdn.net/211.100.26.124
測試2:本機名ComputerName
執(zhí)行如下命令:
java inet.MyInetAddress2 ComputerName
運行結(jié)果:
ComputerName/192.168.18.10
測試3:代表本機的localhost
執(zhí)行如下命令:
java inet.MyInetAddress2 localhost
運行結(jié)果:
localhost/127.0.0.1
對于本機來說,除了可以使用本機名或localhost外,還可以在hosts文件中對本機做“IP/域名”映射(在Windows操作系統(tǒng)下)。這個文件在C:\WINDOWS\system32\drivers\etc中。打開這兩個文件中,在最后加一行如下所示的字符串:
192.168.18.100 www.mysite.com
測試4:本機域名www.mysite.com
執(zhí)行如下命令:
java inet.MyInetAddress2 www.mysite.com
運行結(jié)果:
www.mysite.com/192.168.18.100
getByName方法除了可以使用域名作為參數(shù)外,也可以直接使用IP地址作為參數(shù)。如果使用IP地址作為參數(shù),輸出InetAddress對象時域名為空(除非調(diào)用getHostName方法后,再輸出InetAddress對象。getHostName方法將在下面的內(nèi)容介紹)。讀者可以使用 129.42.58.212作為MyInetAddress2的命令行參數(shù)(這是www.ibm.com的IP),看看會得到什么結(jié)果。

