什么是Socket ?
网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个
socket;
Socket 本质是编程接口(API),对 TCP/IP 的封装;TCP/IP 也要提供可供程序员做网络开发所用的接口,这就是 Socket 编程接口;
Socket通常也称作"套接字",用于描述 IP 地址和端口,是一个通信链的句柄,可以用来实现不同虚
拟机或不同计算机之间的通信。在 Internet 上的主机一般运行了多个服务软件,同时提供几
种服务。每种服务都打开一个 Socket,并绑定到一个端口上,不同的端口对应于不同的服务。
Socket 连接步骤
- 服务器监听:指服务器端套接字并不定位具体的客户端套接字,而是处于等待连
接的状态,实时监控网络状态。 - 客户端请求:指由客户端的套接字提出连接请求,要连接的目标是服务器端的
套接字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套
接字的地址和端口号,然后就向服务器端套接字提出连接请求。 - 连接确认:指当服务器端套接字监听到或者说接收到客户端套接字的连接请求,
它就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户端,
一旦客户端确认了此描述,连接就建立好了。而服务器端套接字继续处于监听状态,继续接
收其他客户端套接字的连接请求。
Java 中的 Socket
java.net 包是网络编程的基础类库。
其中 ServerSocket 和 Socket 是网络编程的基础类型。ServerSocket 是服务端应用类型。Socket 是客户端建立连接的类型。当连接建立成功后,服务器和客户端都会有一个 Socket 对象示例,可以通过这个 Socket 对象实例,完成会话的所有操作。
对于一个完整的网络连接来说,Socket 是平等的,没有服务器客户端分级情况。