学习网络编程的第一步就是要认识IP地址,IP地址是计算机在网络的唯一标识,在互联网中,如果一台计算机要与另一台计算机通讯,就必须要有自己的IP地址,类似于每个人都要有自己的手机号码一样。
IP地址使用32位的二进制数据表示。例如:某一台计算机的IP地址为:
11001010 1110100 00000000 00000001
为了方便记忆,将IP地址的32位二进制数分为4段,每段8位用十进制整数表示,上面的IP地址可以表示为:
202.116.0.1
这样计算机的IP地址就比较容易记忆了。
IP地址由网络地址和主机地址构成。网络地址表示网络中的某一个网段,主机地址表示网段上的某一个主机。
多台计算机通过通信线路和通信设备连接在一起就构成了计算机网络,世界上最大的网络就是互联网,互联网之外还有很多大大小小、规模不一的网络,如校园网、社会机构和企业的内部网等等,这些网络一般都与互联网连接。
国际互联网工程任务组(简称IETF)为了让IP地址能够表示规模不一的网络,制定了IP编址方案。该方案将IP地址地址空间划分为A、B、C、D、E五种类型,每类有不同长度的网络地址和主机地址。

IP编址方案
按照IP编址方案,每类的IP地址范围如下:
A类IP地址范围:1.0.0.0~126.255.255.255 B类IP地址范围:128.0.0.0~191.255.255.255 C类IP地址范围:192.0.0.1~223.255.255.255 D类IP地址范围:224.0.0.0~239.255.255.255 E类IP地址范围:240.0.0.0~255.255.255.255
现在IP地址编址方案有IPV4和IPV6两个版本,当前使用最多的是IPV4版本,IPV6的IP地址长度是128位,比IPV4能够容纳更多的网络和主机。
由于数字型的IP地址很难记忆。所以在互联网中,大多使用简单明了的、由字符串组成的、有规律的、容易记忆的名字来代表互联网上的主机,这就是域名,如www.baidu.com。
在Java程序中,如何操作IP地址呢?例如希望查看某一网站域名的IP地址是多少?本机的IP地址是多少?
Java提供了InetAddress类来操作IP地址,InetAddress类有两个子类分别是Inet4Address和Inet6Address,用于操作IPV4地址和IPV6地址。InetAddress类在java.net包内。
InetAddress类的常用方法说明如下:
static InetAddress getByName(String host)
该方法返回与host主机名称相关的InetAddress 对象,通过InetAddress对象的getHostAddress()方法可以获取host主机的IP地址。主机名可以是机器名,也可以是域名如java.sun.com。
static InetAddress getLocalHost()
该方法返回本地主机的InetAddress对象。
String getHostName()
返回此IP地址的主机名。如果此InetAddress是使用主机名创建的,则将记住并返回此主机名;否则,将执行反向名称查找,并根据系统配置的名称查找服务返回结果。
boolean isReachable(int timeout)
该方法测试该IP地址是否可访问。方法会尽最大努力尝试访问主机,如果访问成功返回true,否则返回false。
案例1:建立InetAddressTest类,输出www.baidu.com域名的IP地址,输出本机IP地址。
新建项目PCoreUnit11,在PCoreUnit11项目新建ip包,在ip包下新建InetAddressTest类。代码如下:
public class InetAddressTest {
/**
* @Title: main
* @Description: Java程序入口main方法
* @param @param args 参数
* @return void 返回类型
* @throws
*/
public static void main(String[] args) {
try {
// 输出域名www.baidu.com的IP地址
InetAddress adderss1 = InetAddress.getByName("www.baidu.com");
System.out.println("www.baidu.com域名的IP地址为:" + adderss1.getHostAddress());
// 输出本机IP地址
InetAddress adderss2 = InetAddress.getLocalHost();
System.out.println("本机IP地址为:" + adderss2.getHostAddress());
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}InetAddressTest程序调用InetAddress类的静态方法getByName()方法获取指定域名的IP地址,调用InetAddress类的静态方法getLocalHost()获取本机的IP地址。InetAddress类在java.net包内,需要使用import语句导入该类。
程序执行结果如下图所示:
