`
seara
  • 浏览: 626543 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Java网络编程从入门到精通(6):使用getCanonicalHostName方法获得主机名

阅读更多

本文为原创,如需转载,请注明作者和出处,谢谢!

上一篇:Java网络编程从入门到精通(5):使用InetAddress类的getHostName方法获得域名

getCanonicalHostName方法和getHostName方法一样,也是得到远程主机的域名。但它们有一个区别。getCanonicalHostName得到的是主机名,而getHostName得到的主机别名。getCanonicalHostName的定义如下:

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->publicStringgetCanonicalHostName()

在访问某些域名时,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方法在不同情况下的输出结果。

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->package mynet;

importjava.net.*;

publicclass DomainName
{
publicstaticvoidoutHostName(InetAddressaddress,Strings)
{
System.out.println(
"通过"+s+"创建InetAddress对象");
System.out.println(
"主机名:"+address.getCanonicalHostName());
System.out.println(
"主机别名:"+address.getHostName());
System.out.println(
"");
}
publicstaticvoidmain(String[]args)throwsException
{
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");
}
}

运行结果

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->通过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地址



国内最棒的Google Android技术社区(eoeandroid),欢迎访问!

《银河系列原创教程》发布

《Java Web开发速学宝典》出版,欢迎定购

分享到:
评论

相关推荐

    Oracle11g从入门到精通2

    《Oracle11g从入门到精通》面向数据库管理人员和数据库开发人员,从实际角度出发,系统地介绍了数据库和Oracle的相关概念和原理、Oracle的数据库管理(如安装与启动,用户权限、备份与恢复等),以及Oracle的应用...

    Java网络编程获取主机信息

    Java网络编程获取主机信息,内有简单界面操作,能够实现获取本地主机以及联网后其他主机的详细信息.很好用!

    C#编程方法:获取本机主机名和IP地址

    C#编程方法:获取本机主机名和IP地址C#编程方法:获取本机主机名和IP地址

    搜索引擎优化(SEO)从入门到精通

    搜索引擎优化(SEO)从入门到精通内容简介:第一部分 正确认识搜索引擎优化 第二部分 域名对SEO的影响 域名及网站名称 域名及网站名称中的关键词 域名后缀 过期域名 域名注册二级域名 第三部分 主机对SEO的...

    WindowsServer2003从入门到精通系列文档

    教程名称:Windows Server 2003 从入门到精通系列文档课程目录:【】WIN2003之“加入域提示找不到网络路径活动目录缺少dns记录”【】WIN2003之“域控制器安全策略”打开错误的解决方法【】WIN2003从入门到精通之域...

    Oracle11g从入门到精通

    《Oracle11g从入门到精通》面向数据库管理人员和数据库开发人员,从实际角度出发,系统地介绍了数据库和Oracle的相关概念和原理、Oracle的数据库管理(如安装与启动,用户权限、备份与恢复等),以及Oracle的应用...

    《Linux从入门到精通》

    Linux操作系统入门书,比较全面 目录 0 前言 0.1 什么是Linux? 0.2 本手册概述 0.3 速查信息 0.4 从以前版本的Red Hat Linux升级 0.5 开发者的话 0.6 编者的话 1 Red Hat Linux 5.1新特性 1.1 安装性能的...

    Linux运维-操作系统 教程 从入门到精通101课-48-48网络命令-主机名与DNS.mp4

    Linux运维-操作系统 教程 从入门到精通101课-48-48网络命令-主机名与DNS.mp4

    WF从入门到精通(第十七章):关联及本地主机通信(上)源码

    WF从入门到精通(第十七章):关联及本地主机通信(上)源码

    VisualC 实效编程 91 获得主机名和IP地址

    VisualC 实效编程 91 获得主机名和IP地址VisualC 实效编程 91 获得主机名和IP地址VisualC 实效编程 91 获得主机名和IP地址VisualC 实效编程 91 获得主机名和IP地址VisualC 实效编程 91 获得主机名和IP地址VisualC ...

    zabbix教程:zabbix从放弃到入门

    zabbix教程:zabbix从放弃到入门(6):触发器、事件、动作 相关概念 zabbix教程:zabbix从放弃到入门(7):触发器详解之一 zabbix教程:zabbix从放弃到入门(8):触发器详解之二 zabbix教程:zabbix从放弃到入门...

    java网络编程技术课程设计.doc

    在Internet上IP地址和主机名是一一对应的,通过域名解析可以由主机名得到机器的IP ,由于机器名更接近自然语言,容易记忆,所以使用比IP地址广泛,但是对机器而言只有 IP地址才是有效的标识符。 光用主机名或IP地址...

    Redis从入门到精通(深入剖析)【55集完整资料】49-redis-redis的主从复制-读写分离、主机宕机.avi

    Redis从入门到精通高清,迅雷播放器组件可顺利播放

    第13章-Java网络编程-Java面向对象程序设计教程-微课视频版-程杰-清华大学出版社.pptx

    端到端的传输协议TCP 主机 A 主机 B 建立连接 数据传输 释放连接 第13章-Java网络编程-Java面向对象程序设计教程-微课视频版-程杰-清华大学出版社全文共17页,当前为第6页。 UDP 在传送数据之前不需要先建立连接。...

    7.如何获取主机名和IP地址?(Visual C++编程 源代码)

    7.如何获取主机名和IP地址?(Visual C++编程 源代码)7.如何获取主机名和IP地址?(Visual C++编程 源代码)7.如何获取主机名和IP地址?(Visual C++编程 源代码)7.如何获取主机名和IP地址?(Visual C++编程 源...

    Oracle.11g.从入门到精通 (2/2)

    7.4.2 使用同义名 7.4.3 使用光标 第8章 数据库用户管理 8.1 授予权限 8.1.1 直接授权 8.1.2 授权角色 8.1.3 使用OEM的“安全管理”创建 角色 8.1.4 使用ALTERUSER语句修改 用户的默认角色 8.1.5 使用SET ROLE控制...

    Oracle.11g.从入门到精通 (1/2)

    7.4.2 使用同义名 7.4.3 使用光标 第8章 数据库用户管理 8.1 授予权限 8.1.1 直接授权 8.1.2 授权角色 8.1.3 使用OEM的“安全管理”创建 角色 8.1.4 使用ALTERUSER语句修改 用户的默认角色 8.1.5 使用SET ROLE控制...

    Java网络聊天室

    Java网络聊天室简介:程序能够连接他人主机(局域网内)、能够进行用户的注册、登录、用户密码的修改;同时能够给对方发送文字内容,并且能够显示聊天时间;局域网内聊天不能超过50个连接(因为服务器套接字...

    Nginx开发从入门到精通

    Nginx开发从入门到精通,需要循序渐进地学习和掌握以下几个方面的知识: 1. Nginx基础知识:了解Nginx的安装、配置和运行原理,熟悉Nginx的核心模块和指令,掌握Nginx的基本使用。 2. Nginx作为Web服务器:配置Nginx作为...

    zabbix从入门到精通.zip

    03-zabbix架构讲解和添加监控主机 04-自定义监控项快速入门 05-自定义触发器快速入门 06-zabbix报警快速入门 zabbix-day2 01-linux模板的监控项介绍 02-zabbix内置key讲解 03-tcp11状态监控 04-自定义监控项深入1 05...

Global site tag (gtag.js) - Google Analytics