码迷,mamicode.com
首页 > Web开发 > 详细

InetAddress类和SocketAddress类简介

时间:2020-06-02 09:24:38      阅读:59      评论:0      收藏:0      [点我收藏+]

标签:没有   负数   程序   地址   系统   address   ora   unknown   问题   

Java网络应用程序中,使用java.net包中的InetAddress类表示IP地址,这个类被大多数的网络类所引用,可同时支持IPV4和IPV6。该类用两个字段表示一个IP地址,hostName和address,hostName包含了主机名,address包含了32位的IP地址。

InetAddress类中没有公共的构造方法,InetAddress提供了静态方法来返回合适的初始化的InetAddress对象。

1、public static InetAddress getByName(String host) throws UnknownHostException

在给定主机名的情况下确定主机的IP地址,主机名可以是机器名(“如java.sun.com")也可以是其IP地址的文本表示形式,如果提供IP地址,则仅检查地址格式的有效性,如果主机为null,则返回表示回送接口地址的InetAddress。

例如:InetAddress address = InetAddress.getByName("https://www.oracle.com/");

2、public static InetAddress[] getAllByName(String host) throws UnknownHostException

在给定主机名的情况下,根据系统上配置的名称服务返回其IP地址所组成的数组。

3、public static InetAddress getByAddress(byte[] addr)throws UnknownHostException

在给定原始IP地址的情况下,返回InetAddress对象,参数按网络字节顺序,地址的高位字节位于getAddress()[0]中。

例如:byte[] addr1 = new byte[]{127.0.0.1};

4、public static InetAddress getByAddress(String host,byte[] addr)throws UnknownHostException

根据提供的主机名和IP地址创建InetAddress,只生成一个InetAddress对象,并不检查该主机名或域名是否合法或是否存在。

5、public static InetAddress getLocalHost() throws UnknownHostException

返回本地主机的IP地址。主机名比IP地址更稳定,通常选择主机名。

方法:

1、getHostName()

返回一个String,该字符串包含了具有该InetAddress对象表示的IP地址的主机的名称,如果查询的机器没有或被禁止查找主机名,则返回点分形式的IP地址。

例如:InetAddress machine = InetAddress.getLocalHost();

           String localhost = machine.getHostName();

2、getHostAddress()

返回一个字符串,该字符串包含了点分格式的IP地址。

例如:InetAddress me = InetAddress.getLocalHost();

           String dQ = me.getHostAddress();

3、getAddress()

返回InetAddress对象的原始IP地址,结果按网络字节顺序,地址的高位字节位于getAddress()[0]中。

Java数组下标从0开始,为了应付128位的IP地址,尽量不要假定关于数组长度的任何信息,尽管当前这样的数组具有4个字节的长度,但是将来实现的方法可能返回具有16字节的数组,如果需要知道数组的长度,则使用数组的length字段。

例如:InetAddress me = InetAddress.getLocalHost();

           byte[] address = me.getAddress();

getAddress()返回的字节是无符号的,这回产生问题,与C语言不同,java没有无符号字节的基本数据类型,值超过127以上的字节作为负数对待,因此,如果要使用getAddress()返回的字节做任何工作时,需要将字节改进为int并做适当的调整,下面是实现该过程的一种方法

int unsignedByte = signedByte<0? signedByte + 256:signedByte;

其他方法:

isMulticastAddress() :是否是一个组播地址。

isAnyLocalAddress():是否是一个通配地址。

isLoopbackAddress():是否是一个环回地址。

isLinkLocalAddress():判断IP地址是否为链路连接地址。

 二、SocketAddress类:

在网络程序中,经常使用套接字Socket来定位和连接某台服务器提供的某个服务,套接字实际上可以看作一个组合(IP地址+端口port)。

SocketAddress类是一个抽象类,需要由子类完成具体的功能实现。

InetSocketAddress类是SocketAddress类的直接子类,实现了IP套接字(socket)地址的封装。

1、public InetSocketAddress(InetAddress addr,int port)

根据ip地址和端口,创建InetSocketAddress对象,如果addr设置为null,就使用通配地址。

例如:InetAddress addr = InetAddress.getByName("java.sun.com");

           int port = 80;

           SocketAddress sockaddr = new InetSocketAddress(addr,port);

2、public InetSocketAddress( int port)

根据端口创建InetSocketAddress对象,IP地址使用通配地址。

InetAddress类和SocketAddress类简介

标签:没有   负数   程序   地址   系统   address   ora   unknown   问题   

原文地址:https://www.cnblogs.com/xl1998/p/13029158.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!