socket传输数据的流程

服务器:

在客户端发动连贯申请之前,服务端必须初始化好。

  1. 初始化socket
  2. 执行bind函数,将服务与IP端口绑定。
  3. 执行listen ,将原来的socket转化为服务端的socket
  4. 服务器阻塞在accept上期待客户端申请的到来。

客户端:

此时服务端曾经准备就绪。

  1. 客户端初始化socket
  2. 执行connect向服务端的IP端口发动连贯申请(三次握手)

一旦握手实现,客户端和服务端建设连贯,就能够进行数据传输。

一旦连贯建设,数据的传输就不再是单向的,而是双向的(即全双工)

敞开:

当客户端须要与服务端断开连接时,执行close函数,操作系统会向服务端发送一个FIN包;服务端收到执行后被动敞开,这时整个数据链路处于半敞开状态;尔后服务端也会执行close函数,整个数据链路才会真正的敞开。

半敞开状态下,发动close的一端在没有收到对端发来的FIN报文之前都认为连贯是失常的;全敞开状态,单方都感知到连贯曾经敞开。