我在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?
答案 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)