socket 传输数据的流程
服务器:
在客户端发动连贯申请之前,服务端必须初始化好。
- 初始化
socket
。 - 执行
bind
函数,将服务与IP 端口
绑定。 - 执行
listen
,将原来的socket
转化为服务端的socket
。 - 服务器阻塞在
accept
上期待客户端申请的到来。
客户端:
此时服务端曾经准备就绪。
- 客户端初始化
socket
。 - 执行
connect
向服务端的IP 端口
发动连贯申请(三次握手)
一旦握手实现,客户端和服务端建设连贯,就能够进行数据传输。
一旦连贯建设,数据的传输就不再是单向的,而是双向的(即全双工)
敞开:
当客户端须要与服务端断开连接时,执行 close 函数,操作系统会向服务端发送一个 FIN 包;服务端收到执行后被动敞开,这时整个数据链路处于半敞开状态;尔后服务端也会执行 close 函数,整个数据链路才会真正的敞开。
半敞开状态下,发动 close 的一端在没有收到对端发来的 FIN 报文之前都认为连贯是失常的;全敞开状态,单方都感知到连贯曾经敞开。