InetAddress类是Java对IP地址(包括IPv4和IPv6)的高层表示。大多数其他网络类都要用到这个类,包括Socket,ServerSocket,URL,DatagramSocket,DatagramPacket等。一般来讲,它包括一个主机名和一个IP地址。

创建InetAddress对象

通过主机名创建

package com.dy.xidian;

import java.net.InetAddress;

import java.net.UnknownHostException; public class Create {
</span><span style="color: #0000ff">public</span> <span style="color: #0000ff">static</span> <span style="color: #0000ff">void</span><span style="color: #000000"> main(String[] args){
</span><span style="color: #0000ff">try</span><span style="color: #000000"> {
</span><span style="color: #008000">//</span><span style="color: #008000">查询我的网站IP</span>
InetAddress address = InetAddress.getByName("www.xdysite.cn"<span style="color: #000000">);
System.out.println(</span>"my site:"+<span style="color: #000000">address.getHostAddress());
</span><span style="color: #008000">//</span><span style="color: #008000">查询百度的所有IP</span>
InetAddress[] baidu = InetAddress.getAllByName("www.baidu.com"<span style="color: #000000">);
System.out.println(</span>"baidu:"<span style="color: #000000">);
</span><span style="color: #0000ff">for</span><span style="color: #000000">(InetAddress addr : baidu)
System.out.println(</span>"\t"+<span style="color: #000000">addr.getHostAddress());
</span><span style="color: #008000">//</span><span style="color: #008000">查询本机IP
</span><span style="color: #008000">//</span><span style="color: #008000">如果主机名存在且是一个FQDN的话,那么会得到真实的IP地址,否则会得到127.0.0.1</span>
InetAddress local =<span style="color: #000000"> InetAddress.getLocalHost();
System.out.println(</span>"local:"+<span style="color: #000000">local.getHostAddress());
} </span><span style="color: #0000ff">catch</span><span style="color: #000000"> (UnknownHostException e) {
e.printStackTrace();
}
}

}

传入的参数为主机名,在构建InetAddress对象时,会去DNS服务器中获取对应的地址,如果在DNS中查找不到对应的IP地址,前两个会抛异常(UnknownHostException),getLocalHost()则会返回localhost和127.0.0.1。

通过IP创建

InetAddress address = InetAddress.getByName("202.117.119.1");
System.out.println(address.getHostName());

传入的是IP地址,则在构建InetAddress时不会去检查DNS。只有当显示的调用了getHostName(),才会完成主机名的DNS查找。

可达性测试


InetAddress类有两个isReachable(),来测试目标地址是否可达。

try{
InetAddress address = InetAddress.getByName("www.xdysite.cn");
if(address.isReachable(2000))
System.out.println("可以连接到该主机");
else
System.out.println("无法连接");
}catch(Exception e){
e.printStackTrace();
}

该方法会使用ICMP echo请求来查看指定地址是否可达。isReachable()的参数是超时时间timeout,单位为毫秒。如果在timeout之内有响应,则返回true,否则返回false。

equals方法


InetAddress类重写了equals方法。如果一个对象本身是InetAddress类的实例,而且与一个InetAddress对象有相同的IP地址,则这两个对象通过equals方法进行判断是相等的。

public static void main(String[] args){
try{
InetAddress address1 = InetAddress.getByName("www.xdysite.cn");
InetAddress address2 = InetAddress.getByName("test.xdysite.cn");
if(address1.equals(address2))
System.out.println("相同");
else
System.out.println("不同");
}catch(Exception e){
e.printStackTrace();
}
}

www.xdysite.cn与test.xdysite.cn指向同一台主机,所以上面的代码运行后会输出相同。

InetAddress类的更多相关文章

  1. java中Inetaddress类

    InetAddress类 InetAddress类用来封装我们前面讨论的数字式的IP地址和该地址的域名. 你通过一个IP主机名与这个类发生作用,IP主机名比它的IP地址用起来更简便更容易理解. Ine ...

  2. Java基础知识强化之网络编程笔记01:InetAddress类的概述和使用

    1. InetAddress类 InetAddress是Java对IP地址的封装,在java.net中有许多类都使用到了InetAddress,包括ServerSocket,Socket,Datagr ...

  3. InetAddress类的使用

    1.1. 简介 IP地址是IP使用的32位(IPv4)或者128位(IPv6)位无符号数字,它是传输层协议TCP,UDP的基础.InetAddress是Java对IP地址的封装,在java.net中有 ...

  4. Java 网络编程(四) InetAddress类

    链接地址:http://www.cnblogs.com/mengdd/archive/2013/03/09/2951895.html Java 网络编程(四) InetAddress类 InetAdd ...

  5. java中的URL InetAddress类

    /* * InetAddress类: * 用于标识网络上的硬件资源,表示互联网协议(ip)地址,是java对ip地址的封装. * 其实例对象包含以数字形式保存的IP地址,主机名. * InetAddr ...

  6. InetAddress类和InetSocketAddress类

    InetAddress 类 封装计算机的 IP 地址,不包含端口号 InetAddress 类常用的方法 1 String getHostAddress() 获得 IP 地址 2 String get ...

  7. Java知多少(103)网络编程之IP地址和InetAddress类

    Java语言的优势之一是Java程序能访问网络资源.Java提供一系列的类支持Java程序访问网络资源. TCP/IP协议和IP地址 为了进行网络通信,通信双方必须遵守通信协议.目前最广泛使用的是TC ...

  8. IP和java.net.InetAddress类的使用

    一.IP 1.地址格式 互联网上每一台计算机都有一个唯一标示自己的标记,这个标记就是IP地址.IP 地址使用32 位长度二进制数据标示,一般在实际中看到的大部分IP地址都是以十进制的数据形式标示的,如 ...

  9. Java学习---InetAddress类的学习

    基础知识 1.InetAddress类 在网络API套接字,InetAddress类和它的子类型对象使用域名DNS系统,处理主机名到主机IPv4或IPv6地址的转换.如图1-1所示. 由于InetAd ...

随机推荐

  1. Android—android与js交互以及相互传参

    Android中可以通过WebView来实现与js的交互,让用户可以在android客户端看到js写的页面,接下来为大家介绍的就是怎样实现此功能: 首先android项目目录下有“assets”文件夹 ...

  2. Android 图片压缩、照片选择、裁剪,上传、一整套图片解决方案

    1.Android一整套图片解决方案 http://mp.weixin.qq.com/s?__biz=MzAxMTI4MTkwNQ==&mid=2650820998&idx=1& ...

  3. iOS UIMenuController菜单

    //1:普通 ////  ViewController.m//  DemoTest#import "ViewController.h"@interface ViewControll ...

  4. IOS开发基础知识--碎片10

    1:如何给表格单元列增加选择时的背影效果 if (cell == nil) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCel ...

  5. 【强烈推荐】XCODE的插件之王

    有许多关于Xcode的插件,在这里强烈推荐的是Alcatraz插件.因为我们可以通过这个插件来安装其他插件 1.Alcatraz插件. Alcatraz是一个方便我们安装各种那个插件的插件.插件之王? ...

  6. 深入浅出React Native 3: 从零开始写一个Hello World

    这是深入浅出React Native的第三篇文章. 1. 环境配置 2. 我的第一个应用 将index.ios.js中的代码全部删掉,为什么要删掉呢?因为我们准备从零开始写一个应用~学习技术最好的方式 ...

  7. iOS开发之Socket

    在IOS开发中,网络请求链接往往是HTTP请求,但是有些需求比较特殊,需要保持持续连接,就需要用到Socket了. 另外在游戏开发中,常常会用到Socket连接,因为http请求数据往往需要用户主动请 ...

  8. yii2 实战教程之如何安装

    作者:白狼 出处:http://www.manks.top/document/install.html 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则 ...

  9. 此实现不是 Windows 平台 FIPS 验证的加密算法的一部分的解决办法方案

    最近操作系统不断地报异常或错误,可能是用得太久了,而刚好工作比较多又不想重新安装系统,但用一段时间后(一天大概有两次)系统就出现各种问题导致无法继续使用真是痛苦万分啊,今天又来了这样的错误: 此实现不 ...

  10. [AlwaysOn Availability Groups]DMV和系统目录视图

    DMV和系统目录视图 这里主要介绍AlwaysON的动态管理视图,可以用来监控和排查你的AG. 在AlwaysOn Dashboard,你可以简单的配置的GUI显示很多可用副本的DMV和可用数据库通过 ...