Java网络编程之InetAddress浅析
Java网络编程之InetAddress浅析
一、InetAddress综述
IP地址是IP使用的32位(IPv4)或者128位(IPv6)位无符号数字,它是传输层协议TCP,UDP的基础。InetAddress是Java对IP地址的封装,几乎所有的Java网络相关的类都和它有关系,例如:serversocket,socket,URL,DataGramSocket,DataGRamPacket等。
InetAddress的实例对象包含以数字形式保存的IP地址,同时还可能包含主机名(如果使用主机名来获取InetAddress的实例,或者使用数字来构造,并且启用了反向主机名解析的功能)。InetAddress类提供了将主机名解析为IP地址(或反之)的方法。
InetAddress对域名进行解析是使用本地机器配置或者网络命名服务(如域名系统(Domain
Name System,DNS)和网络信息服务(Network Information
Service,NIS))来实现。对于DNS来说,本地需要向DNS服务器发送查询的请求,然后服务器根据一系列的操作,返回对应的IP地址,为了提高效率,通常本地会缓存一些主机名与IP地址的映射,这样访问相同的地址,就不需要重复发送DNS请求了。在java.net.InetAddress类同样采用了这种策略。在默认情况下,会缓存一段有限时间的映射,对于主机名解析不成功的结果,会缓存非常短的时间(10秒)来提高性能。
Java提供了InetAddress类来代表IP地址,InetAddress下还有2个子类:Inet4Address、Inet6Address,它们分别代表Internet Protocol version 4(IPv4)地址和Internet Protocol version 6(IPv6)地址,不过这两个子类不常用,这里也不在赘述。
此外,InetAddress类没有提供构造器,而是提供了如下两个静态方法来获取InetAddress实例:
getByName(String host):根据主机获取对应的InetAddress对象。
getByAddress(byte[] addr):根据原始IP地址来获取对应的InetAddress对象。
二、InetAddress数据结构

可见,InetAddress实现了Serializable接口,其对象可序列化
三、InetAddress方法摘要
| 方法摘要 | |
|---|---|
boolean |
equals(Object obj) 将此对象与指定对象比较。 |
byte[] |
getAddress()返回此 InetAddress 对象的原始 IP 地址。 |
static InetAddress[] |
getAllByName(String host)在给定主机名的情况下,根据系统上配置的名称服务返回其 IP 地址所组成的数组。 |
static InetAddress |
getByAddress(byte[] addr)在给定原始 IP 地址的情况下,返回 InetAddress 对象。 |
static InetAddress |
getByAddress(String host, 根据提供的主机名和 IP 地址创建 InetAddress。 |
static InetAddress |
getByName(String host)在给定主机名的情况下确定主机的 IP 地址。 |
String |
getCanonicalHostName()获取此 IP 地址的完全限定域名。 |
String |
getHostAddress()返回 IP 地址字符串(以文本表现形式)。 |
String |
getHostName()获取此 IP 地址的主机名。 |
static InetAddress |
getLocalHost()返回本地主机。 |
int |
hashCode()返回此 IP 地址的哈希码。 |
boolean |
isAnyLocalAddress()检查 InetAddress 是否是通配符地址的实用例行程序。 |
boolean |
isLinkLocalAddress()检查 InetAddress 是否是链接本地地址的实用例行程序。 |
boolean |
isLoopbackAddress()检查 InetAddress 是否是回送地址的实用例行程序。 |
boolean |
isMCGlobal()检查多播地址是否具有全局域的实用例行程序。 |
boolean |
isMCLinkLocal()检查多播地址是否具有链接范围的实用例行程序。 |
boolean |
isMCNodeLocal()检查多播地址是否具有节点范围的实用例行程序。 |
boolean |
isMCOrgLocal()检查多播地址是否具有组织范围的实用例行程序。 |
boolean |
isMCSiteLocal()检查多播地址是否具有站点范围的实用例行程序。 |
boolean |
isMulticastAddress()检查 InetAddress 是否是 IP 多播地址的实用例行程序。 |
boolean |
isReachable(int timeout)测试是否可以达到该地址。 |
boolean |
isReachable(NetworkInterface netif, int ttl, 测试是否可以达到该地址。 |
boolean |
isSiteLocalAddress()检查 InetAddress 是否是站点本地地址的实用例行程序。 |
String |
toString()将此 IP 地址转换为 String。 |
四、代码示例
package me.net.ip; import java.net.InetAddress;
import java.net.UnknownHostException; /**
* InetAddress用来代表IP地址 一个InetAddress对象代表一个IP地址
*
* @author Administrator
*
*/
public class TestInetAddress { public static void main(String[] args) throws UnknownHostException {
//如何创建一个InetAddress对象
InetAddress inet = InetAddress.getByName("www.baidu.com");
System.out.println(inet);
System.out.println(inet.getHostName());
System.out.println(inet.getHostAddress());
//获取本机信息
inet = InetAddress.getLocalHost();
System.out.println(inet);
System.out.println(inet.getHostName());
System.out.println(inet.getHostAddress());
} }
如果,您对我的这篇博文有什么疑问,欢迎评论区留言,大家互相讨论学习。
如果,您认为阅读这篇博客让您有些收获,不妨点击一下右下角的【推荐】。
如果,您希望更容易地发现我的新博客,不妨点击一下左下角的【关注我】。
如果,您对我的博文感兴趣,可以关注我的后续博客,我是【AlbertRui】。转载请注明出处和链接地址,欢迎转载,谢谢!
Java网络编程之InetAddress浅析的更多相关文章
- Java网络编程之InetAddress和URL
在Java中提供了专门的网络开发程序包---java.net,java的网络编程提供了两种通信协议:TCP(传输控制协议)和UDP(数据报协议). 一.IP(Internet Protocol) 与I ...
- Java网络编程之TCP、UDP
Java网络编程之TCP.UDP 2014-11-25 15:23 513人阅读 评论(0) 收藏 举报 分类: java基础及多线程(28) 版权声明:本文为博主原创文章,未经博主允许不得转载. ...
- Java网络编程之UDP
Java网络编程之UDP 一.C/S架构中UDP网络通信流程 ①创建DatagramSocket与DatagramPacket对象 ②建立发送端,接收端 ③建立数据包 ④调用Socket的发送.接收方 ...
- Java网络编程之TCP
Java网络编程之TCP TCP主要需要两个类:Socket和ServerSocket,Socket是客户端连接服务器时创建,参数需要指定服务器的ip和端口,ServerSocket是服务器端创建 ...
- Java网络编程之URLConnection
Java网络编程之URLConnecton 一.URLConnection简介 URLConnection是一个抽象类,表示指向URL指定资源的活动连接.URLConnection有两个不同但相关的用 ...
- Java网络编程之URL和URI
Java网络编程之URL与URI 一.URL与URI简介 URI = Universal Resource Identifier 统一资源标志符 URL = Universal Resource Lo ...
- java网络编程之TCP通讯
java中的网络编程之TCP协议的详细介绍,以及如何使用,同时我在下面举2例说明如何搭配IO流进行操作, /* *TCP *建立连接,形成传输数据的通道: *在连接中进行大数据量传输: *通过三次握手 ...
- 3.Java网络编程之IP
前面两篇博文我们已经简单了解了IP.端口.协议以及两种参考模型,我们现在重新从程序角度来看下这个参考模型. 如果我们从事的是Web网站开发,那么我们应该知道HTML是一种超文本标记语言 (Hyper ...
- java网络编程之UDP通讯
详细介绍了java中的网络通信机制,尤其是UDP协议,通过对UDP的基本使用进行举例说明如何使用UDP进行数据的发送接收,并举了两个小demo说明UDP的使用注意事项. UDP协议原理图解: UDP协 ...
随机推荐
- 【MySQL】(四)表
本篇文章将从InnoDB存储引擎表的逻辑存储及实现开始进行介绍,然后将重点分析表的物理存储特征,即数据在表中是如何组织存放的.简单来说,表就是关于特定实体的数据集合,这也是关系型数据库模型的核心. 1 ...
- 关于Servlet小总结
目录 Servlet Servlet简介 Servlet简单实现 Servlet注解 Servlet生命周期 启动时加载Servlet Servlet客户端 HTTP请求的结构 Servlet服务器 ...
- linux初学者-系统启动故障篇
linux初学者-系统启动故障篇 在系统的操作中,有时会不小心误删或者操作失误使得系统启动不起来,下文将列举几种常见的系统启动失败的情况及解决的办法. 1.删除或者覆盖mbr的446个字节 mbr的4 ...
- 解决 document.getElementsByClassName 在 IE8 下的兼容下的问题
H5中新增了一个令人期待已久的方法:getElementsByClassName,这个方法让我们可以通过 class 属性中的类名来访问元素,这是极好的. but! 这个方法在IE9以下的浏览器是不支 ...
- Python基础总结之第二天从变量开始(新手可相互督促)
hhh 为年薪20万加油ヾ(◍°∇°◍)ノ゙ 一.变量:(变量的命名规则:一般使用字母开头,可以使用下划线连接,以及数字) 正确的变量命名示范: (尽量使用容易理解什么用途的词语) a1 na ...
- 《HTTP权威指南》--阅读笔记(一)
HTTP: HyperText Transfer Protocol 测试站点:http://www.joes-hardware.com URI包括URL和URN URI: Uniform Resour ...
- SpringBoot第一天
一,SpringBoot 介绍 1,如果使用 Spring 开发一个"HelloWorld"的 web 应用: • 创建一个 web 项目并且导入相关 jar 包.SpringMV ...
- 消息中间件和JMS介绍(一)
在一个公司创立初期,他可能只有几个应用,系统之间的关联也不是那么大,A系统调用B系统就直接调用B提供的API接口:后来这个公司做大了,他一步步发展有了几十个系统,这时候A系统要调用B系统的接口,但是B ...
- HTML之必备meta标签
meta标签写在HTML的<head>中,推荐每个手机H5页面必加以下的代码: <head> <meta charset="UTF-8"> &l ...
- Unity进阶之:Shader渲染
版权声明: 本文原创发布于博客园"优梦创客"的博客空间(网址:http://www.cnblogs.com/raymondking123/)以及微信公众号"优梦创客&qu ...