Socket 编程
Socket (套接字):本质是编程接口(API),是对 TCP/IP 协议的封装
套接字上联应用进程,下联网络协议栈,是应用程序通过网络协议进行通信的接口,是应用程序与网络协议根进行交互的接口
一、编程流程
注:要通过互联网进行通信,至少需要一对套接字,其中一个运行于客户端,我们称之为 Client Socket
,另一个运行于服务器端,我们称之为 Server Socket
-
1.服务器监听
所谓服务器监听,是指服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态 。
-
2.客户端请求
所谓客户端请求,是指由客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端接字提出连接请求 。
-
3.连接确认
所谓连接确认,是指当服务器端套接字监听到或者说接收到客户端套接字的连接请求,就会响应客户端套接字的请求,建立一个新的线程,并把服务器端套接字的描述 发送给客户端。一旦客户端确认了此描述,连接就建立好了。而服务器端套接字继续处于监听状态,接收其他客户端套接字的连接请求 。
二、主要类型
-
1.流式套接字(SOCK_STREAM)
流式套接字用于提供面向连接、可靠的数据传输服务。该服务将保证数据能够实现无差错、无重复送,并按顺序接收。流套接字之所以能够实现可靠的数据服务,原因在于其使用了传输控制协议,即
TCP(The Transmission Control Protocol)协议
。 -
2.数据报套接字(SOCK_DGRAM)
数据报套接字提供一种无连接的服务。该服务并不能保证数据传输的可靠性,数据有可能在传输过程中丢失或出现数据重复,且无法保证顺序地接收到数据。数据报套接字使用
UDP( User DatagramProtocol)协议
进行数据的传输。由于数据报套接字不能保证数据传输的可靠性,对于有可能出现的数据丢失情况,需要在程序中做相应的处理。
三、主要特点
根据套接字的不同类型,可以将套接字调用分为面向连接服务和无连接服务 。
面向连接服务的主要特点如下:
-
(1)数据传输过程必须经过建立连接、维护连接和释放连接3个阶段;
-
(2)在传输过程中,各分组不需要携带目的主机的地址;
-
(3)可靠性好,但由于协议复杂,通信效率不高 。
面向无连接服务的主要特点如下:
-
(1)不需要连接的各个阶段;
-
(2)每个分组都携带完整的目的主机地址,在系统中独立传送;
-
(3)由于没有顺序控制,所以接收方的分组可能出现乱序、重复和丢失现象;
-
(4)通信效率高,但可靠性不能确保 。
四、表示方法
- 套接字Socket =(IP地址:端口号),套接字的表示方法是点分十进制的lP地址后面写上端口号,中间用冒号或逗号隔开。
- 每一个传输层连接唯一地被通信两端的两个端点(即两个套接字)所确定。
- 例如:如果IP地址是210.37.145.1,而端口号是23,那么得到套接字就是(210.37.145.1:23) 。