Python结构未知大小

时间:2015-12-21 14:40:26

标签: python struct unpack

我在Python中实现协议,以便一个程序将数据发送到另一个程序。它使用结构获取数据。当发件人决定发送不同大小的邮件时,我无法理解如何使用pack和unpack。接收器如何知道在结构上使用unpack之前初始化结构,当它不知道包中的数据大小是多少时? 在发送方,我有:

values = (numOfPackage, data)
st = struct.Struct('I 502s')
packed_data = st.pack(*values)

接收方做:

packed_data = s.recv(506)
while packed_data != "":
       st = struct.Struct('I 502s')
       unpacked_data = st.unpack(packed_data)
       print unpacked_data[1]
       packed_data = s.recv(506)

然后我想发送一条更短的消息,例如"我完成了#34;从发送者到接收者..但是接收者如何知道不做st = struct.Struct('I 502s'),因为它实际上是10s而不是502s?

1 个答案:

答案 0 :(得分:0)

由于每次收到的金额相同,您可以在确定实际长度后切片:

st = struct.Struct('I 502s')
packed_data = s.recv(st.size)
while packed_data:
    length, data = st.unpack(packed_data)
    data = data[:length]
    print data
    packed_data = s.recv(st.size)

或者,使用较短的Struct来解析长度,然后手动切出您关心的位:

st = struct.Struct('I')
packed_data = s.recv(506)
while packed_data:
    length, = st.unpack_from(packed_data)  # Ignores trailing data using unpack_from
    data = packed_data[st.size:st.size+length]
    print data
    packed_data = s.recv(506)