网络可以使不同物理位置上的计算机达到资源共享和通信的目的,在Java中也提供了专门的网络开发程序包—-java.net,以方便开发者进行网络程序的开发。
Java的网络编程提供了两种通信协议:TCP(传输控制协议),UDP(数据报协议)。
关于TCP和UDP
TCP和UDP都属于传输层协议,TCP(Transmission Control Protocol)是可靠的传输协议,传输前会采用三次握手的方式建立连接,以保证传输的可靠性。
而UDP(User Datagram Protocol)协议是不可靠的传输协议,即发送出去的数据不一定接收得到,网上的聊天工具一般使用UDP协议。

IP(Internet Protocal)与InetAddress

IP地址简介

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

IP地址格式

IP地址=网络地址+主机地址

  • 网络号:用于识别主机所在的网络。
  • 主机号:用于识别该网络中的主机。
    IP地址分为5类,A类地址保留给政府机构,B类地址分配给中等规模的公司,C类地址分配给任何需要的人,D类地址用户组播,E类地址用于实验,各类地址可以容纳的地址数目不同,这5类地址的范围如下表所示。

序号

地址分类

地址范围

1

A类地址

1.0.0.1~126.255.255.254

2

B类地址

128.0.0.1~191.255.255.254

3

C类地址

192.0.0.1~233.255.255.254

4

D类地址

224.0.0.1~239.255.255.254

5

E类地址

240.0.0.1~255.255.255.254

在上面的地址分类表中可以发现没哟127.X.X.X的表示,这是因为127.X.X.X是保留地址,用做循环测试,在开发测试中经常使用127.0.0.1表示本机的IP地址。

IPv4,IPv6

IPv4(Internet Protocal version 4)是互联网协议的第4个版本,也是使用最广泛的版本,但是IPv4已经无法满足当今互联网上的主机数量,所以在此基础之上有产生的新的版本IPv6,使用IPv6可以比IPv4容纳更多的主机。

InetAddress

InetAddress类主要表示IP地址,这个类有两个子类:Inet4Address,Inet6Address,一个用于表示IPv4,另一个用于表示IPv6。InetAddress类的常用方法如下表所示。

序号

描述

1

public static InetAddress getByName(String host)throws UnknownHostException

在给定主机名的情况下确定主机的 IP 地址(InetAddress对象)。

2

public static InetAddress getLocalHost() throws UnknownHostException

返回本地主机的IP地址(InetAddress对象)

3

public String getHostName()

获取此 IP 地址(InetAddress对象)的主机名。

4

public boolean isReachable(int timeout) throws IOException

测试是否可以达到该地址。

实例: 测试InetAddress类

package java1.net.ip;

import java.net.InetAddress;
public class InetAddressDemo
{
    public static void main(String args[]) throws Exception
    {   
        InetAddress locAdd = null;
        InetAddress csdn = null;
        locAdd = InetAddress.getLocalHost();// 得到本机
        //注意要把"https://"去掉
        csdn = InetAddress.getByName("blog.csdn.net");
        System.out.println("本机的        IP地址:" + locAdd.getHostAddress());
        System.out.println("   CSDN博客地址:" + csdn.getHostAddress());
        System.out.println("    本机是否可达:" + locAdd.isReachable(5000));
        System.out.println("CSDN博客是否可达:" + csdn.isReachable(5000));
    }
}

运行结果:

本机的   IP地址:192.168.45.9
   CSDN博客地址:47.95.47.253
    本机是否可达:true
CSDN博客是否可达:true