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)
    
  • 相关阅读:
    dedecms织梦建站总结
    ubuntu安装
    git命令
    关于测试日报
    Appium环境搭建(Windows版)
    jmeter,CSV数据加载、数据库连接、正则
    jmeter,参数、Bean Shell断言
    jmeter安装和组件说明
    造数据
    WEB UI自动化
  • 原文地址:https://www.cnblogs.com/bowendown/p/11704203.html
Copyright © 2011-2022 走看看