欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Socat套接字中的TCP编程模式-与UDP编程模式-

程序员文章站 2024-01-04 15:41:46
...


TCP编程模式针对面向连接的网络应用,这类应用在传输层采用的是TCP协议。通信双方在传输数据前需要建立连接,在传输数据结束后需要释放连接。服务器是提供某种网络服务的应用进程,它通过熟知端口号向客户机提供服务。服务器的熟知端口始终处于侦听状态,不断检查是否有客户机发送的连接请求。客户机与服务器在建立连接时经过三次握手:客户机首先向服务器发送连接请求,服务器接收连接请求并向客户机返回响应,客户机再向服务器发送对该响应的确认。

TCP编程模式相对固定。客户机与服务器之间要进行通信,需要依次调用Socket接口提供的不同函数。但是,服务器编程比客户机编程要复杂得多,这是因为服务器需要并发处理多个服务请求。图2-8给出了TCP编程模式的工作流程。其中,客户机首先调用socket()函数建立套接字,然后调用connect()函数请求与服务器建立连接,在连接建立后可以调用send()与recv()函数分别发送与接收数据,最后调用closesocket()函数关闭套接字。

服务器首先调用socket()函数建立套接字,然后调用bind()函数将某个端口与套接字相绑定,再调用listen()函数在套接字绑定的端口上侦听连接建立请求。当服务器侦听到有连接建立请求到达时,调用accept()函数创建新的临时套接字与客户机建立连接,同时服务器使原有的套接字返回侦听状态。服务器使用新创建的子线程与客户机建立连接。在连接建立后可以调用send()与recv()函数分别发送与接收数据,最后调用closesocket()函数关闭临时套接字与原有套接字。

客户机向服务器发送服务请求完全是随机的,并且可能有多个客户机同时发送请求。服务器需要随时通过熟知端口来侦听服务请求,并且要具备同时处理多个并发请求的能力,这是服务器与客户机设计中的最大区别。服务器并发处理的解决方案基本分为两种:并发服务器与重复服务器。这两种方案分别适合于不同的服务类型。其中,并发服务器(Concurrent Server)采用的是工作在后台的守护进程(daemon),当有服务请求到达时将会激活该进程来进行处理。

并发服务器本身始终要处于等待并侦听的状态。当服务器接收到客户机发送的服务请求时,它根据该请求的进程号去激活子进程提供服务,而服务器自身会回到等待状态继续侦听请求。在这里,并发服务器自身被称为主(master)服务器,它激活的子进程被称为从(slave)服务器。因此,服务器必须拥有一个全网熟知的进程地址。图2-9给出了并发服务器的工作原理。由于不同的从服务器可以并发、独立地处理不同客户机的服务请求,因此并发服务器比较适合于面向连接的服务类型。

 
(点击查看大图)图2-8   TCP编程模式的工作流程
UDP编程模式

UDP编程模式针对无连接的网络应用,这类应用在传输层采用的是UDP协议,通信双方在传输数据前不需要建立连接。服务器是提供某种网络服务的应用进程,它通过熟知端口向客户机提供服务。服务器的熟知端口始终处于侦听状态,不断检查是否有客户机发送的连接请求。服务器采用重复服务器方式处理多个服务请求。

UDP编程模式也相对固定。客户机与服务器之间进行通信,需要依次调用Socket接口提供的不同函数。但是,服务器编程比客户机编程要复杂得多。图2-10给出了UDP编程模式的工作流程。客户机与服务器都首先调用socket()函数建立套接字,然后调用sendto()与recvfrom()函数分别发送或接收数据,最后调用closesocket()函数关闭套接字。服务器在发送与接收数据之前,调用bind()函数将某个端口与套接字绑定。


 
图2-10   UDP编程模式的工作流程
重复服务器(Interactive Server)采用请求队列来存储到达的服务请求,并根据先到先服务的原则顺序处理服务请求。重复服务器处理客户机请求的数量受队列长度的限制,但是可以有效控制对服务请求的处理时间,因此它比较适合于无连接的服务类型。图2-11给出了重复服务器的工作原理。客户机与服务器首先形成自己的半相关的三元组,客户机根据服务器的熟知端口建立全相关的五元组。
 
图2-11   重复服务器的工作原理
摘自http://book.51cto.com/art/201007/209377.htm
 
相关标签: socket 网络应用

上一篇:

下一篇: