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