笔记整理,参考见本链接。
:star2:三次握手
:star2:四次挥手
:star2:实现流程
:star2:客户端代码解析
1 | # socket简单编写:服务端 客户端 |
:star:服务端代码解析
1 | # socket简单编写:服务端 客户端 |
:star2:Close 假象
四次挥手没有在python中体现的原因,参考别人的回答:
背景
工作中自己用python写了一个tcp工具,然后用while循环一直接收消息,并且打印出来。然后正常close发现设备并没有离线,然后用了临时的规避方案,发现其实是一直阻塞在recv()接收方法里面,只要传输一条协议,让recv()吃到消息即可正常运行while来让其break退出,但是这种规避方式是临时的,治病要治其根,所以对现在socket进行了研究。
问题原因
虽然已经将连接close掉了,但是client端仍然可以顺利的接收到消息,而且,如果client端发送数据的间隔小于超时时间的话,此连接可以顺利的一直使用,这样,close貌似就一点儿效果都没有了。然后下面是官方解释close()releases the resource associated with a connection but does not necessarily close the connection immediately. If you want to close the connection in a timely fashion, callshutdown() beforeclose().
大体意思是:close方法可以释放一个连接的资源,但是不是立即释放,如果想立即释放,那么请在close之前使用shutdown方法