处理思路:

1.声明每段数据的大小,这个大小需要使用4个字节
2.接到数据大小后,分块接收

接收时,假设每次最大接收1024
此时采用min{1024,剩余未接收的大小}作为循环的最大接收

  1. deal_sticky(con,down_size,chunk_size = 0,object=''):
  2. """
  3. 功能:这个函数用于考虑大小的情况下,接受信息数据,不考虑类型
  4. 输出一律为二进制
  5. :param con: 链接管道
  6. :param down_size: 下载文件大小
  7. :param chunk_size: 每次下载大小
  8. :return: 返回下载的二进制bytes类型
  9. """
  10. # 粘包处理函数
  11. msg = b''
  12. has_recv_size = 0
  13. while has_recv_size < down_size:
  14. remain_size = down_size-has_recv_size
  15. chunk_size = remain_size if chunk_size == 0 else min(remain_size,chunk_size)
  16. chunk = con.recv(chunk_size)
  17. if object:
  18. object.write(chunk)
  19. object.flush()
  20. else:
  21. msg += chunk
  22. has_recv_size += len(chunk)
  23. print(msg)