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,)
posted @ 2020-03-02 12:35  大道至诚  阅读(102)  评论(0编辑  收藏  举报