struct模块
struct模块的使用
pack和unpack用法是主要用于解决TCP协议的产生的粘包问题
-
pack用法:
- pack是把输入的数值打包成为4个字节的长度,无论数值多少,pack后的结果都是4个字节,这样可以先把文件的长度确定下来,通过打包把长度传递过去,通过长度来接收文件。
- 格式:
l_s = struct.pack('i', 数据的长度)
sk/conn.send(l_s)
第一个必须是类型,数值对应的是'i', 第二个是数据的长度
-
unpack用法:
- unpack是把传递过来的数据长度解包为可以看懂的正常数值
- 格式:
l_r = conn/sk.unpack('i', 打包的数据/l_s)[0]
conn/sk.recv(l_r)
第一个必须是打包前的原数据类型,第二个需要解包的数据, 解包后的数据是由长度组成的元组,必须转换取下标为0
'''client.py'''
import struct
a ='123456adsfghvcxaasdfghbvc'
l = len(a)
s = struct.pack('i', l)
print(s)
sk.send(s)
# 结果是:b'\x19\x00\x00\x00'
'''server.py'''
import struct
# l_pack = sk.recv()
# length = struct.unpack('i', l_pack)
length = struct.unpack('i', b'\x19\x00\x00\x00')[0]
print(length)
# 结果是:(25,)