(摘抄自:
TCP/IP 应用程序的通信连接模式 http://www.ibm.com/developerworks/cn/aix/library/0807_liugb_tcpip/index.html)
(注:代码实现可以在这里找到 http://blog.csdn.net/mythfish/archive/2008/11/17/3321789.aspx)
一、连接建立
(1)利用一个clinet连接一个server形式多client连接
server轮流使用多个端口建立与client的连接,连接关闭后立即释放端口。server针对每一个client连接一个专门的进程来处理,由于端口有限,server用一个循环来处理每个可用的端口,新端口需要bind()来绑定,所以从bing开始到close是一个循环体。
(2)使用多个accept实现多个client连接
多accept的server也只有一个socket,一个bind,一个listen。它建立许多工作子进程,每个子进程都有accept,这样可以为每个client建立socket描述符。循环体从accept开始到close结束。
(3)并发的server模式实现多client连接
accept之后fork一个子进程。socket会产生listenfd(socket描述符),accept会产生connfd。连接建立后子进程继承连接描述符服务于client,父进程则继续使用listenfd等待另外一个client的连接,以产生另外一个connfd和子进程。并发服务器支持的最大client数有listen的第二个参数决定。
(4)使用I/O多路技术实现多client连接
采用一个线程处理多个文件描述符的方式。I/O多路技术采用select或poll系统调用实现,select和poll功能相同,但poll可以更少使用内存资源以及更少的错误产生。select系统调用可以使一个进程检测多个等待的I/O是否准备好,当设备没准备好时,select处于阻塞状态,其中一个准备好后select返回,同时select会在等待一个超时时间后返回。在listen和accept之间插入select调用,使用三个宏FD_ZERO(),FD_CLR(),FD_SET(),在调用select前设置socket描述符屏蔽位,在select返回后使用FD_ISSET()来检测socket描述符集中对应的socket描述符位是否被设置。如果被设置则可以进行读写通信操作。
二、通信连接方式
通信的连接方式主要有短连接和长连接
(1)短连接通信指client方与server方每次通信报文收发时建立通讯连接,交易完成后立即断开。
(2)长连接通信,连接建立后为多次数据报交易服务。长连接下,需要循环读写通信数据。为区分每次的通信数据,需要在数据头指定数据的长度。
三、通信发送和接收方式设计
(1)同步发送接收
报文发送后需要等待接收方返回消息报文。同步方式需要考虑超时问题。同步方式一般与短连接通信结合使用。
(2)异步发送与接收
发送方只管发送数据,接收方只顾接收数据。通常,发送和接收在两个不同的进程处理,一般与长连接通信结合使用。
(3)异步双工
两个不同的子进程分别负责发送和接收,server与client分别fork两个进程,形成两个连接,两个连接都是单向的,一个接收,另一个发送。
(4)异步单工
两个不同的程序分别负责发送和接收,两个应用程序依靠应用逻辑来实现。
(注:代码实现可以在这里找到 http://blog.csdn.net/mythfish/archive/2008/11/17/3321789.aspx)
一、连接建立
(1)利用一个clinet连接一个server形式多client连接
server轮流使用多个端口建立与client的连接,连接关闭后立即释放端口。server针对每一个client连接一个专门的进程来处理,由于端口有限,server用一个循环来处理每个可用的端口,新端口需要bind()来绑定,所以从bing开始到close是一个循环体。
(2)使用多个accept实现多个client连接
多accept的server也只有一个socket,一个bind,一个listen。它建立许多工作子进程,每个子进程都有accept,这样可以为每个client建立socket描述符。循环体从accept开始到close结束。
(3)并发的server模式实现多client连接
accept之后fork一个子进程。socket会产生listenfd(socket描述符),accept会产生connfd。连接建立后子进程继承连接描述符服务于client,父进程则继续使用listenfd等待另外一个client的连接,以产生另外一个connfd和子进程。并发服务器支持的最大client数有listen的第二个参数决定。
(4)使用I/O多路技术实现多client连接
采用一个线程处理多个文件描述符的方式。I/O多路技术采用select或poll系统调用实现,select和poll功能相同,但poll可以更少使用内存资源以及更少的错误产生。select系统调用可以使一个进程检测多个等待的I/O是否准备好,当设备没准备好时,select处于阻塞状态,其中一个准备好后select返回,同时select会在等待一个超时时间后返回。在listen和accept之间插入select调用,使用三个宏FD_ZERO(),FD_CLR(),FD_SET(),在调用select前设置socket描述符屏蔽位,在select返回后使用FD_ISSET()来检测socket描述符集中对应的socket描述符位是否被设置。如果被设置则可以进行读写通信操作。
二、通信连接方式
通信的连接方式主要有短连接和长连接
(1)短连接通信指client方与server方每次通信报文收发时建立通讯连接,交易完成后立即断开。
(2)长连接通信,连接建立后为多次数据报交易服务。长连接下,需要循环读写通信数据。为区分每次的通信数据,需要在数据头指定数据的长度。
三、通信发送和接收方式设计
(1)同步发送接收
报文发送后需要等待接收方返回消息报文。同步方式需要考虑超时问题。同步方式一般与短连接通信结合使用。
(2)异步发送与接收
发送方只管发送数据,接收方只顾接收数据。通常,发送和接收在两个不同的进程处理,一般与长连接通信结合使用。
(3)异步双工
两个不同的子进程分别负责发送和接收,server与client分别fork两个进程,形成两个连接,两个连接都是单向的,一个接收,另一个发送。
(4)异步单工
两个不同的程序分别负责发送和接收,两个应用程序依靠应用逻辑来实现。