TCP客户端/服务器模型

在TCP/IP网络应用中,通信的两个进程间相互作用的主要模式是客户/服务器模式(Client/Server model),即客户向服务器发出服务请求,服务器接收到请求后,提供相应的服务。

原理图

过程描述:

TCP服务端

(1)启动一个TCP服务器端(也就是一个socket),

(2)bind()绑定端口,绑定服务器地址,绑定ip

(3)listen()监听端口,可监听多个

(4)进入accept状态(阻塞),这是一个while(true)死循环(但是这个死循环会做优化,消化的资源会很少),等待客户端连接

TCP客户端

(1)建立一个socket

(2)connect() 地址 ip 端口,成功连接到服务端,服务端则fork一个子进程来处理

(3)客户端写入数据,服务端就会去读.处理,然后写回客户端

(4)客户端再去读,完成close结束连接

(5)服务端read到客户端已关闭,服务端close关闭.

简单理解:

类比成打电话的过程

对服务器端来说

socket函数:要创建一个套接字(调用socket函数),安装一个电话机

bind函数:为电话机绑定一个号码

listen函数:处于监听的状态

accept函数:等待对方的连接,也就是说等待对方电话拨打过来;如果没有电话拨打过来,就一直阻塞,直到客户端连接到达

read函数:接受客户的请求,并对请求进行处理

write函数:将处理的客户端请求结果返回给客户端,进行数据应答

以上的 read函数 write函数 会因为客户端的循环请求,服务端进行循环的接收处理请求,数据应答过程。

close:服务端read函数读取到了EOF文件描述符,表示对方关闭了连接,也要把自己的一个套接字给关闭掉。

对于客户端来说:

socket函数:要创建一个套接字(调用socket函数),安装一个电话机

connect函数:类似于是拨打对方的电话号码,拨通之后就建立连接,一旦连接建立之后,双方开始就开始进行通信(一问一答的通信)

write函数:向服务端发起请求

read函数:客户端接收服务端的数据应答,紧接着,有可能会再一次的发起另外一个请求(write函数),如图为一个循环

close函数:客户端发起终止(这是一个文件结束的通知),相当于是发送了一个EOF文件描述符,会导致服务端read函数等于0

后续会对函数详细解释。

Last updated