zoukankan      html  css  js  c++  java
  • 10.18(粘包问题与解决方法,UDP,socketserver)

    subprocess模块

    1. 可以帮你通过代码执行操作系统的终端命令
    2. 并返回终端执行命令后的结果

    粘包问题

    服务端第一次发送的数据,客户端无法精确的一次性接收完;下一次发送的数据与上一次未接收完的数据粘在一起了,就是粘包.

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

    TCP协议特性

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

    解决粘包问题

    struct模块

    是一个可以将很长的数据的长度,压缩成固定的长度的一个标记(数据报头)
    必须先报头,发送报头,在发送真实数据

    既要发文件,又要发文件的描述信息
    1.客户端发送字典给服务端
    send_dic = {
    	file_name:文件名
    	file_size:文件的真实长度
    }
    2.通过json模块序列化成bytes数据
    json_data = json.dumps(send_dic)
    bytes_data = json_data.encode("utf-8") #bytes文件
    3.先获取字典的报头
    `headers = struct.pack('i' , len(bytes_data))`
    4.服务端收到字典,并接收到文件的真实数据
    

    上传大文件

    客户端往服务端上传大文件

    UDP

    UDP是一种传输协议

    1. 不需要建立双向通道
    2. 不会粘包
    3. 客户端给服务端发送数据,不需要等待服务端返回接收成功
    4. 数据容易丢失,数据不安全

    TCP

    就好比打电话

    UDP

    就好比发短信

    SocketServer

    python内置模块,可以简化socket套接字服务端的代码
    简化TCP与UDP服务端的代码
    必须要创建一个类

  • 相关阅读:
    C# 获得word中某一段落所在页的页码
    写一个安全的Java单例
    递归算法
    redis连接池连接失败的问题
    A query was run and no Result Maps were found for the Mapped Statement .....................
    解决maven默认JDK1.5报错
    mybatis控制台不报错数据库却没有值返回的问题
    LNMP 环境更换Nginx 服务器为Tengine
    简易的phpexcel导出柱状图
    Laravel学习基础篇之--路由
  • 原文地址:https://www.cnblogs.com/793564949liu/p/11707941.html
Copyright © 2011-2022 走看看