python学习第二十五节(粘包)
socket复习
from socket import *这种写法不要写
绑定网卡的时候,"" 这种代表本机所有地址,127也是本机IP 回环地址,外面是进不来的。
127.0.0.1 只能本机的网卡访问这个IP ,外网的是访问不了127的。
解决命令返回值为空的时候卡死的状态,如上图
UDP:
上图为服务端:
下图为客户端
粘包:
time
struct 先写一个报头,json序列化,将报头的长度取出来,发送报头长度,发送报头,发送数据。
利用超时规则,sleep3秒解决粘包问题。
也可以利用更改recv()内的数字,更改它缓存的数量。
import struct模块
res=struct.pack('i',123123123123) #将数据打包成4个数字的长度
print(res)
len(res)
struct.unpack('i',res)[0]
(123123123123,) #解包之后是一个元组的格式,索引是0的为内容,所以需要[0]
利用struct取报头长度方法解决粘包问题:import socket
以上为SERVER端
上面如图,是客户端写法。
下面如图,是将报头写成字典的模式,再用struct的方法取值发送:
如下图,是上面写法的client写法:
中天一片无情月,是我平生不悔心