<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 原創網絡編程

    主站蜘蛛池模板: 亚洲毛片一级带毛片基地| 亚洲精品国产品国语在线| 91在线亚洲综合在线| 120秒男女动态视频免费| 亚洲美女激情视频| 国产电影午夜成年免费视频| 亚洲福利电影一区二区?| 无码乱肉视频免费大全合集| 亚洲丝袜中文字幕| 午夜老司机免费视频| 日韩国产欧美亚洲v片| 亚洲Aⅴ无码一区二区二三区软件| 污视频网站在线观看免费| AV在线亚洲男人的天堂| 国产午夜精品久久久久免费视| 亚洲一区二区在线视频| 成人黄色免费网址| 337P日本欧洲亚洲大胆艺术图| 亚洲一区二区三区在线播放| 大地影院MV在线观看视频免费 | 手机在线看永久av片免费| 亚洲宅男精品一区在线观看| 四虎成人免费网址在线| 免费人成动漫在线播放r18| 亚洲性日韩精品国产一区二区| 精品视频在线免费观看| 亚洲人6666成人观看| 免费观看国产小粉嫩喷水| 波霸在线精品视频免费观看| 亚洲自偷自偷精品| 韩国二级毛片免费播放| 国产日韩精品无码区免费专区国产| 亚洲Av熟妇高潮30p| 日韩免费观看一级毛片看看| 国产乱妇高清无乱码免费| 亚洲国产日产无码精品| 亚洲国产成人爱av在线播放| 99视频免费观看| 黄色三级三级三级免费看| 亚洲国产综合专区电影在线 | 亚洲高清一区二区三区电影|