今天遇到python socket 读取消息不能读取完全的问题
size = struct.unpack("!I", socket_obj.recv(4))
data_size = int(size[0])data = socket_obj.recv(data_size)
如此写法并不能完全读取消息内容。原因是scoket recv 是流式读取,不能保证一次读取完成。
需要改写成以下写法。 记录一下
size = struct.unpack("!I", socket_obj.recv(4))
data_size = int(size[0])
#print 'data size = %d' % (data_size)data = ''
recv_size = 0
while True:
buff = socket_obj.recv(1024)
recv_size += len(buff)
data += buff
if recv_size >= data_size:
break
print 'data readed size = %d' % len(data)