Java之InetAddress类

简介

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秒)来提高性能。

具体使用

构造方法

http://www.javaweb.cc/help/JavaAPI1.6/index.html?java/nio/ReadOnlyBufferException.html

获得InetAddress对象:

getByAddress(byte[] addr) ~ 在给定原始 IP 地址的情况下,返回 InetAddress 对象。
getByAddress(String host, byte[] addr) ~ 根据提供的主机名和 IP 地址创建 InetAddress。
getAllByName(String host)~在给定主机名的情况下,根据系统上配置的名称服务返回其 IP 地址所组成的数组。
getByName(String host) ~在给定主机名的情况下确定主机的 IP 地址。

具体代码

import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.Arrays;

/*
 * InetAddress类
 */
public class Test01 {

    public static void main(String[] args) throws UnknownHostException {
        // 获取本机的InetAddress实例
        InetAddress address1 = InetAddress.getLocalHost();
        System.out.println("计算名:" + address1.getHostName());
        System.out.println("IP地址:" + address1.getHostAddress());
        // 在给定主机名的情况下,根据系统上配置的名称服务返回其 IP 地址所组成的数组。
        System.out.println("根据系统上配置的名称服务返回其 IP 地址所组成的数组" + address1.getAllByName(address1.getHostName())[0]);
        //获取此 IP 地址的完全限定域名。
        System.out.println("获取此 IP 地址的完全限定域名"+address1.getCanonicalHostName());
        // 获取原始(字节数组形式)的IP地址
        byte[] bytes = address1.getAddress();
        System.out.println("字节数组形式的IP:" + Arrays.toString(bytes));
        System.out.println(address1);// 直接输出InetAddress对象

        // 根据机器名获取InetAddress实例
        InetAddress address2 = InetAddress.getByName("chenwei");
        System.out.println("计算名:" + address2.getHostName());
        System.out.println("IP地址:" + address2.getHostAddress());
        // 将此对象与指定对象比较
        System.out.println(address1.equals(address2));

    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值