Java Socket编程

Java Socket编程,URI/URL/URNInetAddressInetSocketAddress、TCP_Socket、UDP_Socket

URI、URL、URN

URI、URL、URN,这三者有什么区别
首先我们来看一下它们的全称:
1) URIUniform Resource Identifier,中文:统一资源标识符
2) URLUniform Resource Locator,中文:统一资源定位符
3) URNUniform Resource Name,中文:统一资源名称

其实从名字上就很容易看得出区别:
URI:强调标识,用于唯一标识一个网络资源
URL:强调定位,用于唯一定位一个网络资源
URN:强调名称,为资源提供持久的位置无关的名称

举个浅显的例子:
URI 就是一个人的个人信息,包括姓名、年龄、性别、住址、手机号等;
URL 就是特指这个人的住址;有了住址,我们就能够找到这个人;
URN 就是特指这个人的姓名;有了姓名,我们就能够讨论这个人;

从这个例子中可以看出,URL、URN 都是 URI 的子集,实际上也是这样的。如下图所示:
URI、URL、URN 区别

URL

例子,"https://www.zfl9.com/ss-redir.html?language=zh_CN#shadowsocks-libev"

URLConnection

例子:

InetAddress、InetSocketAddress

InetAddress:表示一个 32bit/128bit 的 IP 地址,有两个子类:Inet4AddressInet6Address
InetSocketAddress:除了包含 IP 地址外,还有 Port 端口号,用于 Socket 通信,是SocketAddress的子类;

InetAddress
因为构造方法的访问权限为包权限,因此不能直接在外部构造一个 InetAddress 对象,只能通过其 static 方法。

例子:

SocketAddress
SocketAddress是一个抽象类,并且类体为空,它的实现类是InetSocketAddress

TCP Socket

主要有两大类:ServerSocket服务端、Socket客户端

ServerSocket

Socket

例子:
单线程文件下载
Server.java

Client.java

运行结果

多线程文件下载
Server.java

Client.java

运行结果

线程池文件下载
Server.java

Client.java

运行结果

UDP Socket

主要用到两个类:DatagramSocketUDP Socket、DatagramPacketUDP 包;

DatagramSocket

DatagramPacket

例子:
Server.java

Client.java

运行结果