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服务端代码
    - 必须要创建一个类
  • 相关阅读:
    RHEL 6.3 详细安装教程
    如何利用sendmail发送外部邮件?
    阿里云API网关(14)流控策略
    阿里云API网关(13)请求身份识别:客户端请求签名和服务网关请求签名
    OpenID Connect 是什么?
    OpenID Connect + OAuth2.0
    OAuth是什么?
    OpendID是什么?
    【华为无线路由器】连接【广电光纤入户设备】宽带上网
    windows7.0旗舰版安装后控制面板自带的Microsoft程序
  • 原文地址:https://www.cnblogs.com/shin09/p/11707453.html
Copyright © 2011-2022 走看看