从服务器拆包邮件时出错.蟒蛇插座



我想打包一些信息,并将其从服务器发送到客户端。然后客户端必须正确地解压缩消息。服务器发送传感器类型(字符串(、通道名称(字符串(和照片(字节(。我做到了。我使用通道的长度和照片的长度,因为它们的大小可以改变。

msg = struct.pack('>3sHI', sensor, len(channel), len(photo)) + channel + photo

对克莱恩我有。

def recv_packets(connection, n):
piece = b''
while len(piece) < n:
packet = connection.recv(n - len(piece))
if not packet:
return None
piece += packet
return piece

def my_recv(connection):
sensor = recv_packets(connection, 3)
if not sensor:
print("not sensor")
return None
sensor_type = struct.unpack('>3s', sensor)[0]

length_of_channel_name = recv_packets(connection, 2)
if not length_of_channel_name:
print("not length of channel name")
# return None
else:
channel_len = struct.unpack('>H', length_of_channel_name)[0]
# here we must get channel name "ChannelFirst", but we also got ff at start. 
# ("ffChannelFirst")
# it isn't right
channel_name = recv_packets(connection, channel_len + len(sensor) + 1)
print(channel_name.decode('utf-8'))

#the same code for photo

return photo, channel_name, sensor_type

正如你所看到的,我可以得到正确的频道名称。(我总是先出发(。那我就不能正确地拍到照片了。我不明白怎么了。请帮帮我。

此字符串不起作用。

msg = struct.pack('>3sHI', sensor, len(channel), len(photo)) + channel + photo

我做到了。现在一切都好了。

msg = struct.pack('>3sH', sensor, len(channel)) + channel
msg += struct.pack('>I', len(photo)) + photo 

最新更新