3.7.4 面向连接的套接字工作过程
面向连接的套接字即流式套接字,采用客户机/服务器的工作模式,工作协议采用TCP协议,其工作过程如图3-37所示。
图3-37 面向连接的套接字工作过程
1.服务器端
面向连接的套接字服务器端的具体实现流程如下。
①创建监听套接字。服务器端首先建立一个监听套接字,相当于准备了一个插座。
②绑定监听端口。为监听套接字指定服务器端的IP地址及端口,执行这个步骤后被指定的IP地址和端口就和这个套接字绑定在一起了,这一步相当于安装插座,被绑定的端口称为监听端口。
③进入监听状态。服务器端的监听套接字进入监听状态,并设定可以建立的最大连接数,以便准备足够的缓冲区,存放连接请求的信息。
④接收用户的连接请求。接收客户机端的连接请求分为以下两种情况。
第1种情况 如果请求缓冲队列中已经有客户机端的连接请求在等待,就从中取出一个连接请求,并接收它。具体过程是:服务器端创建一个新的套接字,称为响应套接字,说明已经接收了这个连接请求,此后就由服务器端的这个响应套接字专门负责与该客户机交换数据的工作。进行完以上过程后,就将此连接请求从请求缓冲队列中清除,说明此连接请求已经被受理。这里需要说明的是,服务器端和客户机端间的后续通信,是通过服务器端的响应套接字实现的。服务器端的监听套接字在接收并处理了客户机的连接请求后,就又重新回到了监听状态,去等待接纳另一个客户机端的请求。
第2种情况 请求缓冲队列中没有任何客户机端的连接请求在等待,那么服务器端就会进入阻塞等待的状态,直到有客户机端连接请求到来。
⑤与客户机端进行通信。当服务器端接收了连接请求并为每个连接请求创建了响应套接字后,就可以通过这个响应套接字跟各个客户机端进程互相收发数据了。
⑥关闭与客户机端的通信。关闭与某一个客户机端进程对应的响应套接字以关闭与其之间的通信。但在这里注意关闭的是响应套接字,而不是监听套接字,关闭某一个响应套接字只是关闭与之对应的客户机端的通信,并不影响与其他客户机端的通信。
⑦关闭监听套接字。关闭监听套接字后,服务器将不能接收新的连接请求。
2.客户机端
在面向连接的套接字通信过程中,客户机端的连接工作相对服务器端要简单,其具体实现流程如下。
①创建客户机端套接字。这时,客户机端的操作系统已经将本地主机默认的IP地址和一个客户机端的自由端口号赋给了这个套接字,因此客户机端不必再经过绑定的步骤。
②提出连接请求。客户机端根据服务器端的IP地址和端口号向服务器端发出连接请求。此时客户机端进程进入阻塞状态,等待服务器端的连接应答,一旦收到来自服务器端的应答,客户机端和服务器端的连接就建立起来了。
③与服务器通信。连接请求被服务器端接收后,便可以与服务器端进行相互收发数据的操作了。
④关闭与服务器的通信。关闭客户机端套接字即可关闭与服务器的通信。