python socket recv()接收不全

浔潯 2019-04-03 07:21:48
很奇怪,用下面的方法发一个请求接受一个,但是发着发着就接收不全了
下面这个方法不是不会产生粘包吗,为什么前面15个数据返回都是完整的,但是第16个请求之后就开始接受不全了。
困扰我很久了,望大神能解答下,给下解决方案


list=[请求1,请求2,请求3。。。请求16,请求17。。。]
for i in list:
s.send(i) # 传输包装好的东西
header_bytes = self.s.recv(8) # 先接收包头
body_len = struct.unpack("!2I", header_bytes)[0] # 得到包体大小
header_len = struct.unpack("!2I", header_bytes)[1]
recv_size = 0
total_data = b''
while recv_size < body_len:
recv_data = self.s.recv(body_len - recv_size)
print("recv_data", recv_data)
total_data += recv_data # 最终的结果
recv_size += len(total_data)

print("第%s返回的消息:"% i , total_data)

...全文
739 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

37,720

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧