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

    今日内容:
        - subprocess模块
    
        - 粘包问题
            服务端第一次发送的数据,客户端无法精确一次性接受完毕。
            下一次发送的数据与上一次数据粘在一起了。
    
            1.无法预测对方需要接受的数据大小长度。
            2.多次连续发送数据量小、并且时间间隔短的数据一次性打包发送。
    
            TCP协议特性:
                tcp是一个流式协议,会将多次连续发送数据量小、并且时间间隔短的数据一次性打包发送。
    
        - 解决粘包问题:
            - struct模块
            必须先定义报头,发送报头,再发送真实数据。
    
            - 既想发送文件,又想发送文件的描述信息
    
                # 客户端发送字典给服务端
                    send_dic = {
                        file_name: 文件名
                        file_size: 文件的真实长度 1000000
                    }
    
                    # 通过json模块序列化成bytes数据
                    json_data = json.dumps(send_dic)
                    bytes_data = json_data.encode('utf-8')  # bytes
    
                    # 先获取字典的报头
                    headers = struct.pack('i', len(bytes_data))
    
                # 服务端接收到字典,并接收文件的真实数据
    
        - 上传大文件
            客户端往服务端上传大文件
    
        - UDP
            UDP是一种传输协议。
                1)不需要建立双向管道。
                2)不会粘包
                3)客户端给服务端发送数据,不需要等待服务端返回接收成功
                3)数据容易丢失,数据不安全。
    
            - TCP: 就好比在打电话。
            - UDP: 就好比在发短信。
    
    
        - QQ聊天室
    
        - SocketServer
            python内置模块,可以简化socket套接字服务端的代码。
            - 简化TCP与UDP服务端代码
            - 必须要创建一个类
    
    
    
    
  • 相关阅读:
    个人网站
    物理读,逻辑读,预读
    正则表达式
    面向对象五大基本原则
    工作总结
    sql性能优化
    sqlServer游标的使用
    ASP.NET安全[开发ASP.NET MVC应用程序时值得注意的安全问题](转)
    一个简单问题引发对IEnumerable和IQueryable的思考
    EFCodeFirst 各种命令整理
  • 原文地址:https://www.cnblogs.com/jinhongquan/p/11715619.html
Copyright © 2011-2022 走看看