zoukankan      html  css  js  c++  java
  • qq聊天室课堂小结day27

    subprocess模块

    1. 可以帮你通过代码执行操作系统的终端命令。
    2. 并返回终端执行命令后的结果。
    import subprocess
    cmd = input('cmd>>:')
    
    obj = subprocess.Popen(
    	# cmd命令
        cmd,
        # Shell = True
        shell = True,
        # 返回正确结果参数
        stdout = subprocess.PIPE,
        # 返回错误结果参数
        stderr = subprocess.PIPE
    
    )
    result = obj.stdout.read() + obj.stderr.read()
    print(result.decode('gbk'))
    
    

    粘包问题

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

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

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

    TCP协议特性:

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

    解决粘包问题

    • struct模块

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

    • 即想发送文件,又想发送文件的描述信息

    客户端发送字典给服务端

    send_dic = {
        file_name:文件名
        file_size:文件的真实长度 100000
    }
    #  通过json模块序列化成bytes数据
    	json_data = json.dumps(send_dic)
        bytes_data = json_data.encode('utf-8') # bytes
        
        # 先获取字典的报头
        headers = struct.pack('i',len(byte_data))
        
        # 服务端接收到字典,并接收文件的真实数据
        
        
    

    UDP

    ​ UDP是一种传输协议。

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

    ​ TCP:就好比在打电话。

    ​ UDP:就好比在发短信。

    SocketServer

    python内置模块,可以简化socket套接字服务端的代码。
    
    - 简化TCP与UDP服务端代码
    - 必须要创建一个类
  • 相关阅读:
    Qt之qInstallMessageHandler(重定向至文件)
    linux下MySQL安装及设置
    Apache2 同源策略解决方案
    BSD和云 – 不可错过的BSD聚会
    Nginx转发地址解决跨域问题
    Nginx下css的链接问题
    nginx 基本操作
    Azure 媒体服务可将优质内容传输至 Apple TV
    支付宝接口
    drf过滤组件
  • 原文地址:https://www.cnblogs.com/shin09/p/11707453.html
Copyright © 2011-2022 走看看