Socket的基本编程模型

Socket的基本编程模型

基本的编程模型分为流式和数据报两种,这两种模型都可以用于互联网上的主机进行通信以及同一主机内的不同进程之间的通信,当这两种方式应用于互联网通信时,底层分别使用了两种协议:TCP和UDP。


描述

服务器创建一个主Socket,通过bind方法绑定IP和端口,通过accept函数为每一个发起请求的客户端创建一个新的Socket;

操作系统为每一个Socket创建一块缓存,程序通过read/write读写缓存数据,Socket之间互不影响(Apache的服务器实现是把每一个Socket分配到一个线程上进行处理)

当客户端正常close时会给服务器发送一个FIN标志,服务器端在执行读操作时会发现read返回0,write操作返回-1(errno表示管道中断)

但如果客户端异常,服务端仅执行read操作则无法获知,曾经执行过read操作的话一定时间内可以获知,为确保客户端异常,服务端可以及时释放资源要么进行应用程序的心跳要么设置保活记时器


描述

数据报模型的服务器端从始至终只有一个Socket,既要负责绑定端口,也要负责每个客户端的数据读写

唯一的Socket它的缓存不是流而是一个消息队列,每次执行recvform的时候从消息队列里拉出第一条(一般是根据服务器收到消息的时间进行入队,先到先进队列)如果消息内容太长,超过recvform参数指定的buffer大小,则消息内容被截断

客户端正常的close和崩溃从recvfrom和sendto没有办法进行体现,所以必须要在应用程序进行显式的处理

lishujun

程序员一枚