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,
byte[] addr)

          根据提供的主机名和 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,
int timeout)

          测试是否可以达到该地址。
 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浅析的更多相关文章

  1. Java网络编程之InetAddress和URL

    在Java中提供了专门的网络开发程序包---java.net,java的网络编程提供了两种通信协议:TCP(传输控制协议)和UDP(数据报协议). 一.IP(Internet Protocol) 与I ...

  2. Java网络编程之TCP、UDP

    Java网络编程之TCP.UDP 2014-11-25 15:23 513人阅读 评论(0) 收藏 举报 分类: java基础及多线程(28) 版权声明:本文为博主原创文章,未经博主允许不得转载.   ...

  3. Java网络编程之UDP

    Java网络编程之UDP 一.C/S架构中UDP网络通信流程 ①创建DatagramSocket与DatagramPacket对象 ②建立发送端,接收端 ③建立数据包 ④调用Socket的发送.接收方 ...

  4. Java网络编程之TCP

    Java网络编程之TCP ​ TCP主要需要两个类:Socket和ServerSocket,Socket是客户端连接服务器时创建,参数需要指定服务器的ip和端口,ServerSocket是服务器端创建 ...

  5. Java网络编程之URLConnection

    Java网络编程之URLConnecton 一.URLConnection简介 URLConnection是一个抽象类,表示指向URL指定资源的活动连接.URLConnection有两个不同但相关的用 ...

  6. Java网络编程之URL和URI

    Java网络编程之URL与URI 一.URL与URI简介 URI = Universal Resource Identifier 统一资源标志符 URL = Universal Resource Lo ...

  7. java网络编程之TCP通讯

    java中的网络编程之TCP协议的详细介绍,以及如何使用,同时我在下面举2例说明如何搭配IO流进行操作, /* *TCP *建立连接,形成传输数据的通道: *在连接中进行大数据量传输: *通过三次握手 ...

  8. 3.Java网络编程之IP

    前面两篇博文我们已经简单了解了IP.端口.协议以及两种参考模型,我们现在重新从程序角度来看下这个参考模型. 如果我们从事的是Web网站开发,那么我们应该知道HTML是一种超文本标记语言 (Hyper ...

  9. java网络编程之UDP通讯

    详细介绍了java中的网络通信机制,尤其是UDP协议,通过对UDP的基本使用进行举例说明如何使用UDP进行数据的发送接收,并举了两个小demo说明UDP的使用注意事项. UDP协议原理图解: UDP协 ...

随机推荐

  1. [NLP-ASR] 语音识别项目整理(一) 语音预处理

      简介 之前参与过114对话系统的项目,中间搁置很久,现在把之前做过的内容整理一下,一是为自己回顾,二是也希望分享自己看的内容,中间也遇到一些问题,如果您可以提一些建议将不胜感激. 114查询主要分 ...

  2. python正则-re的使用

    今天在刷题的时候用到了正则,用的过程中就感觉有点不太熟练了,很久没有用正则都有点忘了.所以现在呢,我们就一起来review一下python中正则模块re的用法吧. 今天是review,所以一些基础的概 ...

  3. RobotFramework_2.新建项目、新建用例、运行用例和查看测试报告

    RobotFramework的使用 新建一个项目 Robotframework-ride的界面 分了四个区域:菜单栏.工具栏.案例及资源区.工作区,如下图: 创建项目 首先,点击File-New Pr ...

  4. Git 从master拉取代码创建新分支

    从master拉取新分支并push到远端 开发过程中经常用到从master分支copy一个开发分支: 1.切换到被copy的分支(master),并且从远端拉取最新版本 $git checkout m ...

  5. 请使用switch语句和if...else语句,计算2008年8月8日这一天,是该年中的第几天。

    请使用switch语句和if...else语句,计算2008年8月8日这一天,是该年中的第几天. #include <stdio.h> int main() { /* 定义需要计算的日期 ...

  6. RocketMQ中Broker的启动源码分析(二)

    接着上一篇博客  [RocketMQ中Broker的启动源码分析(一)] 在完成准备工作后,调用start方法: public static BrokerController start(Broker ...

  7. 数据结构-二叉搜索树和二叉树排序算法(python实现)

    今天我们要介绍的是一种特殊的二叉树--二叉搜索树,同时我们也会讲到一种排序算法--二叉树排序算法.这两者之间有什么联系呢,我们一起来看一下吧. 开始之前呢,我们先来介绍一下如何创建一颗二叉搜索树. 假 ...

  8. Eclipse中代码自动添加注释及代码注释模板

    介绍 为了提高代码的可读性以及为了有些代码有洁癖的人的需求,我们要从学生到职业进行迈进的过程中,必须把以前的那种代码可读性不高的习惯改掉,因为我们必须要与企业接轨.. 好了,废话不多说,反正就是提升自 ...

  9. Oracle 12cR1 RAC集群安装(一)--环境准备

    基本环境 操作系统版本 RedHat6.7 数据库版本 12.1.0.2 数据库名称 testdb 数据库实例 testdb1.testdb2 (一)安装服务器硬件要求 配置项目 参数要求 网卡 每台 ...

  10. 码农"混子"的思想转变

    首先介绍一下自己,在高中的时候学校对于我们这种普通班级采取的都是放养状态,所以高中的学习真是不咋地,可能除了自己擅长的数学以外其他也就考个三四十分,后来磕磕绊绊的在打游戏之余也会学习,第一次参加高考跟 ...