inetaddress java_java中Inetaddress类

inetaddress java_java中Inetaddress类InetAddress类InetAddress类用来封装我们前面讨论的数字式的IP地址和该地址的域名。你通过一个IP主机名与这个类发生作用,IP主机名比它的IP地址用起来更简便更容易理解。InetAddress类内部隐藏了地址数字。InetAddress类中的工厂方法InetAddress类没有明显的构造函数。为生成一个InetAddress对象,必须运用一个可用的工厂方法。工厂方法(factor…

大家好,又见面了,我是你们的朋友全栈君。

InetAddress类

InetAddress类用来封装我们前面讨论的数字式的IP地址和该地址的域名。

你通过一个IP主机名与这个类发生作用,IP主机名比它的IP地址用起来更简便更容易理解。

InetAddress类内部隐藏了地址数字。

InetAddress类中的工厂方法

InetAddress类没有明显的构造函数。为生成一个InetAddress对象,必须运用一个可用的工厂方法。

工厂方法(factory method)仅是一个类中静态方法返回一个该类实例的约定。

对于InetAddress,三个方法:getLocalHost()、getByName()以及getAllByName()可以用来创建InetAddress的实例。

getLocalHost()仅返回象征本地主机的InetAddress对象。

本机地址还为localhost,127.0.0.1,这三个地址都是一回事。

getByName()方法返回一个传给它的主机名的InetAddress。

如果这些方法不能解析主机名,它们引发一个UnknownHostException异常。

在Internet上,用一个名称来代表多个机器是常有的事。

getAllByName()工厂方法返回代表由一个特殊名称分解的所有地址的InetAddresses类数组。

在不能把名称分解成至少一个地址时,它将引发一个UnknownHostException异常。

IP地址是IP使用的32位(IPv4)或者128位(IPv6)位无符号数字,它是传输层协议TCP,UDP的基础。InetAddress是Java对IP地址的封装,在java.net中有许多类都使用到了InetAddress,包括ServerSocket,Socket,DatagramSocket等等。

InetAddress的实例对象包含以数字形式保存的IP地址,同时还可能包含主机名(如果使用主机名来获取InetAddress的实例,或者使用数字来构造,并且启用了反向主机名解析的功能)。InetAddress类提供了将主机名解析为IP地址(或反之)的方法。

InetAddress对域名进行解析是使用本地机器配置或者网络命名服务(如域名系统(Domain Name System,DNS)和网络信息服务(Network Information Service,NIS))来实现。对于DNS来说,本地需要向DNS服务器发送查询的请求,然后服务器根据一系列的操作,返回对应的IP地址,为了提高效率,通常本地会缓存一些主机名与IP地址的映射,这样访问相同的地址,就不需要重复发送DNS请求了。在java.net.InetAddress类同样采用了这种策略。在默认情况下,会缓存一段有限时间的映射,对于主机名解析不成功的结果,会缓存非常短的时间(10秒)来提高性能。

InetAddress对象的获取

InetAddress的构造函数不是公开的(public),所以需要通过它提供的静态方法来获取,有以下的方法:

static InetAddress[] getAllByName(String host)

static InetAddress getByAddress(byte[] addr)

static InetAddress getByAddress(String host,byte[] addr)

static InetAddress getByName(String host)

static InetAddress getLocalHost()在这些静态方法中,最为常用的应该是getByName(String host)方法,只需要传入目标主机的名字,InetAddress会尝试做连接DNS服务器,并且获取IP地址的操作。代码片段如下,注意我们假设以下的代码,都是默认导入了java.net中的包,在程序的开头加上import java.net.*,否则需要指定类的全名java.net.InetAddress。

InetAddress address=InetAddress.getByName(“www.baidu.com”);

注意到这些方法可能会抛出的异常。如果安全管理器不允许访问DNS服务器或禁止网络连接,SecurityException会抛出,如果找不到对应主机的IP地址,或者发生其他网络I/O错误,这些方法会抛出UnknowHostException。所以需要写如下的代码:

try{

InetAddress address=InetAddress.getByName(“www.baidu.com”);

System.out.println(address);

}catch(UnknownHostException e)

{

e.printStackTrace();

}

下面是一个实例过程:

importjava.net.InetAddress;/*** this example is used to show how to get InetAddress instance

*@authorDakiler*/

public classExample1

{public static void main(String args[])throwsException

{

InetAddress address=InetAddress.getByName(“www.baidu.com”);

System.out.println(address);

System.out.println(“—–“);

InetAddress[] addresses=InetAddress.getAllByName(“www.baidu.com”);for(InetAddress addr:addresses)

{

System.out.println(addr);

}

}

}

运行结果如下:

www.baidu.com/119.75.213.61

—–www.baidu.com/119.75.213.61www.baidu.com/119.75.216.30

在这个例子中,我们使用到了getByName()以及getAllByName()两个方法,前者通过”www.baidu.com”来获取InetAddress的对象,并且输出到控制台。System.out.println(address); 默认调用了InetAddress.toString()方法,在结果中可以看到”www.baidu.com/119.75.213.61″的输出结果,其中119.75.213.61为百度网站的IP地址。

getAllByName()方法是根据主机名返回其可能的所有InetAddress对象,保存在一个数组中。在这个例子中,输出的结果中,www.baidu.com有两个ip地址分别为119.75.213.61以及119.75.216.30。

另外一个静态常用的静态方法是getLocalHost(),返回的是本地地址,如下例:

importjava.net.InetAddress;public classExample2

{public static void main(String args[])throwsException

{

InetAddress address=InetAddress.getLocalHost();

System.out.println(address);

}

}

这个例子首先是根据InetAddress.getLocalHost()方法获取本地IP地址,然后通过System.out.println()打印出来,结果如下:

dakiler/192.168.1.102

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/152232.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 风控模型评估方法以及大数据风控模型概念

    风控模型评估方法以及大数据风控模型概念更新一下有效性指标中的区分能力指标:KS(Kolmogorov-Smirnov):KS用于模型风险区分能力进行评估,指标衡量的是好坏样本累计分部之间的差值。好坏样本累计差异越大,KS指标越大,那么模型的风险区分能力越强。KS的计算步骤如下:1.计算每个评分区间的好坏账户数。2.计算每个评分区间的累计好账户数占总好账户数比率(good%)和累计坏账户数占总坏账户数比率(bad%

    2022年6月3日
    41
  • apache RewriteRule

    apache RewriteRule最近发现一个新的东西(可能以前一直没有注意)Apache中的rewrite_modul模块。可以将你的url得到的地址直接重新定义成自己想要的位置。 也就是说输入的URL可以重新定义成一个动态的地址。而且这个URL 不会被改写,动态地址是在后台执行然后返回数据。这个功能还可以使用在写程序时自己定义的CACHE,完全提高服务器负担,加快响应时间,这个就看

    2022年5月15日
    37
  • loadrunner视频教程百度云_loadrunner使用教程图文

    loadrunner视频教程百度云_loadrunner使用教程图文播客视频,java虚拟用户http://www.boobooke.com/v/bbk1900/LR动态链接库小布老师视频:测试工具概述,兼LoadRunner介绍-1-4http://www.boobooke.com/v/bbk1046http://www.boobooke.com/v/bbk1047http://www.boobooke.com/v/

    2022年10月14日
    3
  • 误删除pycharm项目中的文件,如何恢复?

    误删除pycharm项目中的文件,如何恢复?https blog csdn net candy gl article details

    2025年7月1日
    3
  • 计算机网络基本知识汇总「建议收藏」

    计算机网络基本知识汇总「建议收藏」概述OSI分层(7层)物理层、数据链路层、网络层、运输层、会话层、表示层、应用层TCP/IP分层(4层)网络接口层、网络层、运输层、应用层五层协议(5层)物理层、数据链路层、网络层、运输层、应用层五层结构的概述应用层:通过应用进程间的交互来完成特定网络应用数据:报文协议:HTTP,SMTP(邮件),FTP(文件传送)运输层:向两个主机进程之间的通信提供通用的数据传输服务。

    2022年7月18日
    19
  • 解决SecureCRT 中文乱码

    解决SecureCRT 中文乱码在linux服务器上搭建solr,用的是SecureCRT 连接linux服务器,发现不能输入中文,配置文件中的中文也是乱码;先以为是SecureCRT工具编码的问题,把编码改成utf-8之后发现还是有乱码;最后才发现其实还有一个地方没有改配置,那就是字体必须是中文字体,而且字符集得是支持中文的字符集如gb2312:还有就是这里不能选择带@的中文字体,不然字体就是躺着的

    2022年7月17日
    18

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号