笔记整理,参考见本链接。
:star2: 三次握手
tcp3
:star2: 四次挥手
tcp4
:star2: 实现流程
clientServerPythonTCP
:star2: 客户端代码解析
python
1 | # socket简单编写:服务端 客户端 |
:star: 服务端代码解析
python
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 方法
:star2: 参考
- Socket 中 TCP 三次握手、四次挥手详解
- Python 学习 —Socket 通信原理以及三次握手和四次挥手详解
- 【python】 TCP 网络编程:TCP 三次握手和四次挥手
- python:Socket 编程(三):tcp 三次握手四次挥手(简单举例编程:服务器、客户端)
- python close () 是假象,真正关闭 Socket 的方法
It has been 1175 days since the last update, the content of the article may be outdated.