zoukankan      html  css  js  c++  java
  • 粘包问题

    一、粘包问题

    服务器第一次发送的数据,客户端无法精确的一次性接收完毕。

    下一次发送的数据与上一次数据在一起了。

    1、导致粘包问题的原因

    1. 无法预测对方需要接收的数据大小长度。
    2. 多次连续发送数据量小,并且时间间隔短的数据一次性打包发送。

    2、TCP协议特性

    TCP是一个流式协议,会将多次连续发送数据量小,并且时间间隔短的数据一次性打包发送。

    二、解决粘包问题

    让发送端在发送数据前,把自己将要发送的字节流总大小让接收端知晓,然后接收端来一个死循环接收完所有数据。

    1、struct模块

    必须先定义报头,发送报头,再发送真实数据。

    # 传输端
    
    message = '你要发送的信息'
    # 打包压缩,获取报头,'i'可以把长度压缩成四个字节的数据传输
    headers = struct.pack('i', len(mssage))
    
    # 先发送头部
    conn.send(headers)
    
    result = '真实数据'
    # 再发送真实数据
    conn.send(result)
    
    # 接收端
    
    # 先获取数据报头
    headers = client.recv(4)
    
    # 解包,或者真实数据长度
    data_len = struct.unpack('i', headers)[0]  # (len, )
    
    # 接收真实数据
    data = client.recv(data_len)
    
  • 相关阅读:
    database使用
    画图工具
    宝塔面板权限不足问题解决
    nginx查看并发数量
    台式机未插入扬声器或者耳机
    键盘出现乱码解决
    lnmp宝塔面板问题
    nginx+mysql双主搭建
    zabbix客户端安装
    java生产条形码
  • 原文地址:https://www.cnblogs.com/bowendown/p/11704203.html
Copyright © 2011-2022 走看看