本文为原创,如需转载,请注明作者和出处,谢谢!
上一篇:Java网络编程从入门到精通(4):DNS缓存
该方法可以得到远程主机的域名,也可以得到本机名。getHostName方法的定义如下:
<!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
-->publicStringgetHostName()
下面是三种创建InetAddress对象的方式,在这三种方式中,getHostName返回的值是不同的。
1.使用getLocalHost方法创建InetAddress对象
如果InetAddress对象是用getLocalHost方法创建的,getHostName返回的是本机名。如下面的代码所示:
<!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
-->InetAddressaddress=InetAddress.getLocalHost();
System.out.println(address.getHostName());//输出本机名
2.使用域名创建InetAddress对象
用域名作为getByName和getAllByName方法的参数调用这两个方法后,系统会自动记住这个域名。当调用getHostName方法时,就无需再访问DNS服务器,而是直接将这个域名返回。如下面的代码所示:
<!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
-->InetAddressaddress=InetAddress.getByName("www.oracle.com");
System.out.println(address.getHostName());//无需访问DNS服务器,直接返回域名
3.使用IP地址创建InetAddress对象
使用IP地址创建InetAddress对象时(getByName、getAllByName和getByAddress方法都可以通过IP地址创建InetAddress对象),并不需要访问DNS服务器。因此,通过DNS服务器查找域名的工作就由getHostName方法来完成。如果这个IP地址不存在或DNS服务器不允许进行IP地址和域名的映射,getHostName方法就直接返回这个IP地址。如下面的代码所示:
<!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
-->InetAddressaddress=InetAddress.getByName("141.146.8.66");
System.out.println(address.getHostName());//需要访问DNS服务器才能得到域名
InetAddressaddress=InetAddress.getByName("1.2.3.4");//IP地址不存在
System.out.println(address.getHostName());//直接返回IP地址
从上面的三种情况可以看出,只有通过使用IP地址创建的InetAddress对象调用getHostName方法时才访问DNS服务器。在其他情况,getHostName方法并不会访问DNS服务器,而是直接将域名或本机名返回。下面的代码演示了在不同情况下如何使用getHostName方法,并计算了各种情况所需的毫秒数。
<!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
-->package mynet;
importjava.net.*;
publicclass DomainName
{
publicstaticvoidmain(String[]args)throwsException
{
longtime=0;
//得到本机名
InetAddressaddress1=InetAddress.getLocalHost();
System.out.println("本机名:"+address1.getHostName());
//直接返回域名
InetAddressaddress2=InetAddress.getByName("www.oracle.com");
time=System.currentTimeMillis();
System.out.print("直接得到域名:"+address2.getHostName());
System.out.println("所用时间:"
+String.valueOf(System.currentTimeMillis()-time)+"毫秒");
//通过DNS查找域名
InetAddressaddress3=InetAddress.getByName("141.146.8.66");
System.out.println("address3:"+address3);//域名为空
time=System.currentTimeMillis();
System.out.print("通过DNS查找域名:"+address3.getHostName());
System.out.println("所用时间:" +String.valueOf(System.currentTimeMillis()-time)+"毫秒");
System.out.println("address3:"+address3);//同时输出域名和IP地址
}
}
运行结果:
<!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
-->本机名:ComputerName
直接得到域名:www.oracle.com所用时间:0毫秒
address3:/141.146.8.66
通过DNS查找域名:bigip-otn-portal.oracle.com所用时间:92毫秒
address3:bigip-otn-portal.oracle.com/141.146.8.66
从上面的运行结果可以看出,第一个毫秒数是0,而第二个毫秒数是92。这说时,使用域名创建的InetAddress对象在使用getHostName方法时并不访问DNS服务器,而使用IP地址创建的InetAddress对象在使用getHostName方法时需要访问DNS服务器。对于第三个毫秒数,可能多次运行DomainName后会越来越小,这是因为DNS服务器的缓存的缘故。但一般这个数都会比0大。也许有很多人会问,第二行和第四行得到的域名怎么不一样,其实www.oracle.com和bigip-otn-portal.oracle.com都是oracle的域名,我们也可以通过http://
bigip-otn-portal.oracle.com来访问oracle的官方网站。至于这两个域名有什么区别,将在下面的文章中讨论。
下一篇:Java网络编程从入门到精通(6):使用getCanonicalHostName方法获得主机名
国内最棒的Google Android技术社区(eoeandroid),欢迎访问!《银河系列原创教程》发布《Java Web开发速学宝典》出版,欢迎定购
分享到:
相关推荐
### JAVA网络编程从入门到精通知识点详解 #### 一、Internet地址概述 互联网中的每一台设备都需要有一个唯一的标识符——IP地址。当前广泛使用的IPv4地址由四个字节组成,而未来的趋势是采用16个字节的IPv6地址。 ...
Java网络编程是开发分布式应用程序的关键技术,它涵盖了网络通信的基础概念和高级应用。...通过编写网络通信的示例程序,可以更好地理解和掌握网络编程的概念和技术,从而达到从入门到精通的目标。
Java网络编程是开发分布式应用程序的关键部分,InetAddress和URL类在其中扮演了核心角色。这两个类都是Java.net包中的核心组件,它们提供了处理网络地址和定位网络资源的能力。 首先,让我们深入了解InetAddress类...
Java网络编程是开发基于互联网应用的关键技术之一,而理解Internet地址是网络编程的基础。本文将深入探讨IP地址的原理和应用,尤其是IPv4和IPv6这两种主要的IP地址类型。 首先,IP地址是互联网上每个设备独一无二的...
除了InetAddress,Java还提供了其他网络编程相关的类,如Socket、ServerSocket、URL等,它们共同构成了Java网络编程的基础。例如,Socket类用于实现客户端和服务器之间的通信,而ServerSocket则用于监听和接受客户端...
本实验主要涉及Java 网络编程的基础知识,包括使用InetAddress类获取主机的IP地址和主机名称,使用Socket和ServerSocket类实现C/S通信。 一、 InetAddress类 InetAddress类是Java中用于表示Internet协议(IP)地址...
### 知识点:网络编程中的InetAddress类使用方法 在网络编程中,`InetAddress` 类是Java标准库中用于处理互联网地址的核心类之一。它主要用于封装和操作IP地址,并提供了一系列方法来获取和处理IP地址相关的数据。...
Java网络编程是计算机科学中的一个重要领域,特别是在软件开发中,它涉及到如何通过网络进行数据传输和通信。在Java中,网络编程主要依赖于Java的Socket编程、ServerSocket、URL类以及NIO(非阻塞I/O)等核心API。这...
- **网络I/O**:Java的InputStream和OutputStream类族在处理网络数据传输时起到关键作用,如SocketInputStream和SocketOutputStream。 - **缓冲和对象序列化**:BufferedInputStream和BufferedOutputStream用于...
在本资料中,《Java网络编程》第三版提供了深入浅出的讲解,旨在帮助开发者提升对这一领域的理解。 1. **基础概念**: - **网络模型**:Java网络编程基于OSI七层模型和TCP/IP四层模型。理解这些模型有助于理解网络...
这本书主要涵盖了Java平台上的网络应用程序开发,从基础概念到高级技术,为读者提供了一套全面的学习路径。以下是本书中涉及的一些关键知识点: 1. **Java网络编程基础**:首先,书中会介绍Java中的Socket编程,...
Java网络编程研究 Java网络编程是指使用Java...Java网络编程是指使用Java语言开发的网络应用程序,基于Socket的Java网络编程是指使用Socket类实现网络通信的编程方式。Java网络编程的应用非常广泛,研究方向也很广泛。
String hostname = inetAddress.getHostName(); Log.d("TAG", "Host Name: " + hostname); } catch (UnknownHostException e) { e.printStackTrace(); } ``` 3. **检查是否可达**: `InetAddress`还提供了`...
《Java网络编程精解》是孙卫琴老师的一本经典教程,主要涵盖了Java语言在网络编程领域的深度解析。这本书深入浅出地介绍了如何使用Java进行网络通信,包括基本的TCP/IP协议、套接字编程、多线程技术以及HTTP、FTP等...
### Java网络编程:连接网络数据库的多种方法 #### 摘要 随着互联网技术的不断发展,Java作为一种跨平台、安全且适用于分布式计算环境的语言,在网络应用程序开发中扮演着至关重要的角色。尤其在网络数据库连接方面...
Java网络编程是开发分布式应用程序的基础,它涉及到网络通信的各种协议,如TCP/IP、UDP等。在Java中,`InetAddress`和`Socket`是两个核心类,它们在处理网络连接和通信时起着至关重要的作用。这篇博客将深入探讨这两...
### Java网络编程精要 #### Internet地址概述与分类 ...以上是对Java网络编程中一些核心知识点的概括,涵盖了从IP地址管理、套接字通信到非阻塞I/O模型的各个方面,为深入理解和应用Java网络编程技术奠定了基础。
而DNS(Domain Name System)是将域名转换为IP地址的系统,Java的InetAddress类提供了DNS解析的功能。 "Javanetwlbc"可能是一个具体的网络编程案例或代码练习,名称可能是“Java网络编程练习”或类似的意思。这可能...
解决这个问题的方法是,使用反射技术来清空InetAddress类中的私有成员变量map。在Android系统中,InetAddress类的私有成员变量map的存储位置在不同版本中有所不同。在Android 4.0以下的版本中,域名和IP键值对存放在...
Java网络编程基础 Datagram类使用方法 (1) .doc Java网络编程基础 InetAddress类的使用.doc Java网络编程基础 ServerSocket类使用.doc 《JAVA编程规范》.doc Java基础 三步学会Java Socket编程(一) .doc Java基础 ...