<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆 - 312, 文章 - 14, 評論 - 1393, 引用 - 0
    數據加載中……

    Java網絡編程從入門到精通(6):使用getCanonicalHostName方法獲得主機名

    本文為原創,如需轉載,請注明作者和出處,謝謝!

    上一篇:Java網絡編程從入門到精通(5):使用InetAddress類的getHostName方法獲得域名

    getCanonicalHostName方法和getHostName方法一樣,也是得到遠程主機的域名。但它們有一個區別。getCanonicalHostName得到的是主機名,而getHostName得到的主機別名。getCanonicalHostName的定義如下:

    public String getCanonicalHostName()

    在訪問某些域名時,getCanonicalHostName方法和getHostName方法的返回值是一樣的,這和DNS服務器如何解釋主機名和主機別名以及它們的設置有關。如通過www.ibm.com創建InetAddress對象后,使用getCanonicalHostName方法和getHostName方法返回的結果都是www.ibm.com(有時直接返回IP地址,這可能和IBMDNS服務器的處理機制有關)。如果DNS不允許通過IP地址得到域名,那么這兩個方法就會返回IP地址來代替域名。getCanonicalHostName方法可以分三種情況來討論:

    1. 使用getLocalHost創建InetAddress對象

    在這種情況下getCanonicalHostName方法和getHostName方法得到的都是本機名。

    2. 使用域名創建InetAddress對象

    在這種情況下,getCanonicalHostName方法是否要訪問DNS服務器,取決于DNS服務器如何解釋主機名和主機別名。也就是說,是否在創建InetAddress對象時就將主機名和主機別名都確定了。在前面已經講過,使用域名創建InetAddress對象后,調用getHostName方法不會訪問DNS服務器。但getCanonicalHostName方法就不一定了。這和DNS服務器的設置有關。如www.126.com就需要訪問DNS服務器,而www.ibm.com就不需要訪問DNS服務器。

    3使用IP地址創建InetAddress對象

        在這種情況下,getCanonicalHostName方法和getHostName方法是完全一樣的,也就是說,它們得到的都是主機名,而不是主機別名。

    之所以要使用主機別名,是因為有時主機名可能比較復雜,如Oracle官方網站的主機名bigip-otn-portal.oracle.com,因此,為了使用戶訪問網站更方便,就增加了更簡單的主機別名,如www.oracle.com。一個主機名可能對應多個主機別名,如oracle.com也是Oracle的主機別名。在IE的地址欄中輸入http:// bigip-otn-portal.oracle.comhttp://oracle.com都可以訪問Oracle官方網站。但我們發現,有很多網站通過主機名無法訪問,只有通過一些別名才能訪問,如126只能通過www.126.com126.com兩個主機別名訪問,而不能通過它的主機名zz-9-77-a8.bta.net.cn來訪問。這是因為在服務端通過HTTP協議做了限制,這個在前面已經討論過了。例程3-8對比了getCanonicalHostNamegetHostName方法在不同情況下的輸出結果。

    package mynet;

    import java.net.*;

    public class DomainName
    {
        
    public static void outHostName(InetAddress address, String s)
        {
            System.out.println(
    "通過" + s + "創建InetAddress對象");
            System.out.println(
    "主 機 名:" + address.getCanonicalHostName());
            System.out.println(
    "主機別名:" + address.getHostName());
            System.out.println(
    "");
        }
        
    public static void main(String[] args) throws Exception
        {
            outHostName(InetAddress.getLocalHost(), 
    "getLocalHost方法");
            outHostName(InetAddress.getByName(
    "www.ibm.com"), "www.ibm.com");
            outHostName(InetAddress.getByName(
    "www.126.com"), "www.126.com");
            outHostName(InetAddress.getByName(
    "202.108.9.77"), "202.108.9.77");
            outHostName(InetAddress.getByName(
    "211.100.26.121"), "211.100.26.121");
        }
    }

        運行結果

    通過getLocalHost方法創建InetAddress對象
    主 機 名:ComputerName
    主機別名:ComputerName

    通過www.ibm.com創建InetAddress對象
    主 機 名:www.ibm.com
    主機別名:www.ibm.com

    通過www.
    126.com創建InetAddress對象
    主 機 名:zz
    -9-77-a8.bta.net.cn
    主機別名:www.
    126.com

    通過202.
    108.9.77創建InetAddress對象
    主 機 名:zz
    -9-77-a8.bta.net.cn
    主機別名:zz
    -9-77-a8.bta.net.cn

    通過211.
    100.26.121創建InetAddress對象
    主 機 名:
    211.100.26.121
    主機別名:
    211.100.26.121

        從上面的運行結果可以看出,如果InetAddress對象是通過IP地址創建的,getCanonicalHostName方法和getHostName方法的值是完全一樣的,它們的值可能是主機名,也可能是IP地址。而用域名創建的InetAddress對象就不一定了,它們的值可能相同(相同的IP地址或域名),也可能不相同,如上面運行結果中的www.126.com使用這兩個方法得到的值就不同。在一般情況下,我們可以使用getHostName來獲得域名,因為如果使用域名來創建InetAddress對象,getHostName所得到的域名就是用來創建InetAddress對象的域名,如果使用IP地址來創建InetAddress對象,getHostName方法等價于getCanonicalHostName方法。

    下一篇:
    Java網絡編程從入門到精通(7):用getHostAddress方法獲得IP地址





    Android開發完全講義(第2版)(本書版權已輸出到臺灣)

    http://product.dangdang.com/product.aspx?product_id=22741502



    Android高薪之路:Android程序員面試寶典 http://book.360buy.com/10970314.html


    新浪微博:http://t.sina.com.cn/androidguy   昵稱:李寧_Lining

    posted on 2009-04-14 08:56 銀河使者 閱讀(6574) 評論(0)  編輯  收藏 所屬分類: java 原創網絡編程

    主站蜘蛛池模板: jizz免费在线观看| 四虎永久在线观看免费网站网址 | 岛国岛国免费V片在线观看| 亚洲成在人线av| 青青草免费在线视频| 免费无码午夜福利片69| 亚洲国产天堂在线观看| 免费被黄网站在观看| 免费无码又爽又刺激高潮软件| 亚洲AV无码精品蜜桃| 亚洲精品线路一在线观看| 18女人毛片水真多免费| 免费观看四虎精品成人| 久久亚洲sm情趣捆绑调教| 免费播放春色aⅴ视频| 91成人在线免费视频| 深夜免费在线视频| 国产成人亚洲精品| 亚洲女同成av人片在线观看| 女性自慰aⅴ片高清免费| 国产麻豆一精品一AV一免费| 久久亚洲色WWW成人欧美| 97se亚洲综合在线| 亚洲日本中文字幕天堂网| 中文字幕无码不卡免费视频| 成人性做爰aaa片免费看| 国产精品亚洲专区无码不卡| 亚洲成无码人在线观看| 国产AV无码专区亚洲精品| 国产大片91精品免费观看男同| 国产国产人免费视频成69堂| 免费播放在线日本感人片| 国产AV日韩A∨亚洲AV电影| 亚洲国产成人久久| 亚洲宅男永久在线| 亚洲开心婷婷中文字幕| 免费人成视频在线观看不卡| 岛国片在线免费观看| 亚洲电影在线免费观看| 男人j进入女人j内部免费网站 | 中文字幕免费视频|