沾包问题的解决-----
struck模块 使用:
# 制作固定长度的报头 一个整型--->固定长度的bytes对象 import struct obj = struct.pack('i',1111111) # 生成一个bytes对象 print(obj,len(obj),type(obj)) b = struct.unpack('i',obj) print(b) print(b[0]) 结果:b'G\xf4\x10\x00' 4 <class 'bytes'>
(1111111,)
1111111
实例运用:
server 端:
# 制作固定长度的报头 total_size = len(stdout)+len(stderr) header = struct.pack('i',total_size) # 将total_size做成客户端可以接受的固定长度 # 发送报头(指定长度)发送给客户端 conn.send(header) # 长度为4 # 把命令的结果返回给客户端 conn.send(stdout) conn.send(stderr)client 端:
# 1 首先接受固定长度的报头 header = socket_obj.recv(4) # 2再解码报头,拿到数据的长度 total_size = struct.unpack('i', header)[0] # 3 接受真实的数据 recv_size = 0 recv_data = b'' while recv_size < total_size: res = socket_obj.recv(1024) recv_data += res recv_size += len(res)

该博客介绍了如何利用Python的struct模块创建和解析固定长度的报头,以实现服务器与客户端之间的数据通信。在服务器端,通过pack方法将数据长度转换为固定长度的bytes对象并发送;在客户端,通过unpack方法解码接收到的报头,获取数据实际长度,从而正确接收完整数据。

被折叠的 条评论
为什么被折叠?



