JAVA認證:創(chuàng)建InetAddress對象的四個靜態(tài)方法

字號:

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é)果。