Java网络编程从入门到精通(8):用getAddress方法获得IP地址

getAddress方法和getHostAddress类似,它们的唯一区别是getHostAddress方法返回的是字符串形式的IP地址,而getAddress方法返回的是byte数组形式的IP地址。getAddress方法的定义如下:

public byte[] getAddress()

这个方法返回的byte数组是有符号的。在Java中byte类型的取值范围是-128?127。如果返回的IP地址的某个字节是大于127的整数,在byte数组中就是负数。由于Java中没有无符号byte类型,因此,要想显示正常的IP地址,必须使用int或long类型。下面代码演示了如何利用getAddress返回IP地址,以及如何将IP地址转换成正整数形式。

package mynet;
import java.net.*;
public class MyIP {     public static void main(String[] args) throws Exception     {         InetAddress address = InetAddress.getByName("www.csdn.net");         byte ip[] = address.getAddress();         for (byte ipSegment : ip)             System.out.print(ipSegment + " ");         System.out.println("");         for (byte ipSegment : ip)         {             int newIPSegment = (ipSegment < 0) ? 256 + ipSegment : ipSegment;             System.out.print(newIPSegment + " ");         }     } }

运行结果:

-45 100 26 122  211 100 26 122

从上面的运行结果可以看出,第一行输出了未转换的IP地址,由于www.csdn.net的IP地址的第一个字节大于127,因此,输出了一个负数。而第二行由于将IP地址的每一个字节转换成了int类型,因此,输出了正常的IP地址。

时间: 2024-12-24 00:58:30

Java网络编程从入门到精通(8):用getAddress方法获得IP地址的相关文章

Java网络编程从入门到精通(4):DNS缓存

在通过DNS查找域名的过程中,可能会经过多台中间DNS服务器才能找到指定的域名,因此,在DNS服务器上查找域名是非常昂贵的操作.在Java中为了缓解这个问题,提供了DNS缓存.当InetAddress类第一次使用某个域名(如www.csdn.net)创建InetAddress对象后,JVM就会将这个域名和它从DNS上获得的信息(如IP地址)都保存在DNS缓存中.当下一次InetAddress类再使用这个域名时,就直接从DNS缓存里获得所需的信息,而无需再访问DNS服务器. DNS缓存在默认时将永

Java网络编程从入门到精通 (9):使用isXxx方法判断地址类型

IP地址分为普通地址和特殊地址.在前面的文章中所使用的大多数都是普通的IP地址,在本文中将介绍如何利用InetAddress类提供的十个方法来确定一个IP地址是否是一个特殊的IP地址. 一.isAnyLocalAddress方法 当IP地址是通配符地址时返回true,否则返回false.这个通配符地址对于拥有多个网络接口(如两块网卡)的计算机非常拥有.使用通配符地址可以允许在服务器主机接受来自任何网络接口的客户端连接.IPv4的通配符地址是0.0.0.0.IPv6的通配符地址是0:0:0:0:0

Java网络编程从入门到精通(16):客户端套接字(Socket)的超时

客户端套接字的超时(timeout)就是指在客户端通过Socket和服务器进行通讯的过程中,由于网络延迟,网络阻塞等原因,造成服务器并未及时响应客户端的一种现象.在一段时间后,客户端由于未收到服务端的响应而抛出一个超时错误; 其中客户端所等待的时间就是超时时间. 由于生产超时错误的一端都是被动端:也就是说,这一端是在接收数据,而不是发送数据.对于客户端Socket来说,只有两个地方是在接收数据:一个是在连接服务器时;另一个是在连接服务器成功后,接收服务器发过来的数据时.因此,客户端超时也分为两种

Java网络编程从入门到精通(13):使用Socket类接收和发送数据

网络应用分为客户端和服务端两部分,而Socket类是负责处理客户端通信的Java类.通过这个类可以连接到指定IP或域名的服务器上,并且可以和服务器互相发送和接受数据.在本文及后面的数篇文章中将详细讨论Socket类的使用,内容包括Socket类基础.各式各样的连接方式.get和set方法.连接过程中的超时以及关闭网络连接等. 在本文中,我们将讨论使用Socket类的基本步骤和方法.一般网络客户端程序在连接服务程序时要进行以下三步操作. 1.         连接服务器 2.         发送

Java网络编程从入门到精通(7):用getHostAddress方法获得IP地址

 这个方法用来得到主机的IP地址,这个IP地址可能是IPv4的地址,也可能是IPv6的地址.getHostAddress方法的定义如下: public String getHostAddress() 无论InetAddress对象是使用哪种方式创建的,getHostAddress方法都不会访问DNS服务器.如果想访问使用IPv6地址的远程主机,需要在操作系统上安装IPv6协议.下面是Windows 2003上安装IPv6协议的步骤: 第一步:打开“本地连接”属性对话框.如图1所示. 图1 “本地

Java网络编程从入门到精通(5):使用InetAddress类的getHostName方法获得域名

该方法可以得到远程主机的域名,也可以得到本机名.getHostName方法的定义如下: public String getHostName() 下面是三种创建InetAddress对象的方式,在这三种方式中,getHostName返回的值是不同的. 1.使用getLocalHost方法创建InetAddress对象 如果InetAddress对象是用getLocalHost方法创建的,getHostName返回的是本机名.如下面的代码所示: InetAddress address = InetA

Java网络编程从入门到精通(2):创建InetAddress对象的四个静态方法

InetAddress类是Java中用于描述IP地址的类.它在java.net包中.在Java中分别用Inet4Address和Inet6Address类来描述IPv4和IPv6的地址.这两个类都是InetAddress的子类.由于InetAddress没有public的构造方法,因此,要想创建InetAddress对象,必须得依靠它的四个静态方法.InetAddress可以通过getLocalHost方法得到本机的InetAddress对象,也可以通过getByName.getAllByNam

Java网络编程从入门到精通(1):Internet地址概述

所有连入Internet的终端设备(包括计算机.PDA.打印机以及其他的电子设备)都有一个唯一的索引,这个索引被称为IP地址.现在Internet上的IP地址大多由四个字节组成,这种IP地址叫做IPv4.除了这种由四个字节组成的IP,在Internet上还存在一种IP,这种IP由16个字节组成,叫做IPv6.IPv4和IPv6后面的数字是Internet协议(Internet Protocol,IP)的版本号. IPv4地址的一般表现形式为:X.X.X.X.其中X为0到255的整数.这四个整数用

Java网络编程从入门到精通(17):Socket类的getter和setter方法(1)

在Java类中,getter和setter方法占了很大的比重.由于Java中没有定义属性的关键字:因此,getter和setter方法用于获得和设置Java类的属性值:如getName和setName方法用于设置name属性的值.如果某个属性只有getter方法,那这个属性是只读的:如果只有setter方法,那么这个属性是只写的.在Socket类中也有很多这样的属性来获得和Socket相关的信息,以及对Socket对象的状态进行设置. 一.用于获得信息的getter方法 我们可以从Socket对