socket传输数据的流程
服务器:
在客户端发起连接请求之前,服务端必须初始化好。
- 初始化
socket
。 - 执行
bind
函数,将服务与IP端口
绑定。 - 执行
listen
,将原来的socket
转化为服务端的socket
。 - 服务器阻塞在
accept
上等待客户端请求的到来。
客户端:
此时服务端已经准备就绪。
- 客户端初始化
socket
。 - 执行
connect
向服务端的IP端口
发起连接请求(三次握手)
一旦握手完成,客户端和服务端建立连接,就可以进行数据传输。
一旦连接建立,数据的传输就不再是单向的,而是双向的(即全双工)
关闭:
当客户端需要与服务端断开连接时,执行close函数,操作系统会向服务端发送一个FIN包;服务端收到执行后被动关闭,这时整个数据链路处于半关闭状态;此后服务端也会执行close函数,整个数据链路才会真正的关闭。
半关闭状态下,发起close的一端在没有收到对端发来的FIN报文之前都认为连接是正常的;全关闭状态,双方都感知到连接已经关闭。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。