python全栈开发day28-网络编程之粘包、解决粘包,上传和下载的作业
一、昨日内容回顾
1. tcp和udp编码
2. 自定义mysocket解决编码问题
二、今日内容总结
1.粘包
1)产生粘包原因:
(1)、接收方不知道消息之间的边界,不知道一次性要取多少字节的数据造成的。
(2)、数据包较小且时间间隔较小,由于合包机制和Nagle算法,将合成一个大包发送过去,由于接收方不知道精准的拆包机制导致粘包
2)产生粘包的两种情况
(1)、发送端需要等缓冲区满才将数据发送出去,产生粘包,(数据包小,时间间隔短,合到一起,产生粘包)
(2)、接收端不及时接收缓冲区的包,造成接收数据混乱(客户端发送了一段数据,服务端只收了一小部分,服务端下次再收的时候还是从缓冲区拿上次遗留的数据,产生粘包)
2.解决粘包
思路:
1、让接收端知道发送数据的大小,发送要传送文件的大小等信息给接收端,这样产生新问题,这个传送文件大小等的信息字典因为不知道他的长度,可能和后边要传送的文件数据产生粘包。
2、将传送文件大小等的信息字典通过struct模块中的pack方法打包成固定大小为4的包数据,在接收端通过接收4字节的大小包并unpack解包,获取文件信息数据,这样就可以完美避免粘包了。
3.作业
4.其他知识总结
1.获取文件大小有两种方法:
1)os.path.getsize(path文件绝对路径)
2)os.stat(path文件绝对路径).st_size
python全栈开发day28-网络编程之粘包、解决粘包,上传和下载的作业的更多相关文章
- Python全栈开发-Day8-Socket网络编程
本节内容 断言 Socket构建框架 ftp构建框架 Socket粘包 Socket介绍 Socket参数介绍 基本Socket实例 通过Socket实现简单SSH SocketServer 支持多用 ...
- python全栈开发day75-用户注册页面ajax实现,用户头像上传、预览、展示
一.昨日内容回顾 1. 内容回顾 1. BBS项目登录 1. 登录用form组件和auth模块 1. form组件做校验很方便 2. auth模块 - authenticate(username=xx ...
- Python全栈【Socket网络编程】
Python全栈[socket网络编程] 本章内容: Socket 基于TCP的套接字 基于UDP的套接字 TCP粘包 SocketServer 模块(ThreadingTCPServer源码剖析) ...
- python全栈开发day27-网络编程
回顾:1.两个架构:C/S B/S(统一了应用的接口)2.同一个电脑两个py文件通信(文件)3.两个电脑通信---网线4.交换机的通信方式:广播.单播.组播5.arp协议:通过ip地址找到对应的m ...
- python全栈开发-Day7 字符编码总结
python全栈开发-Day7 字符编码总结 一.字符编码总结 1.什么是字符编码 人类的字符--------->翻译--------->数字 翻译的过程遵循的标准即字符编码(就是一个字符 ...
- 学习笔记之Python全栈开发/人工智能公开课_腾讯课堂
Python全栈开发/人工智能公开课_腾讯课堂 https://ke.qq.com/course/190378 https://github.com/haoran119/ke.qq.com.pytho ...
- Python全栈开发相关课程
Python全栈开发 Python入门 Python安装 Pycharm安装.激活.使用 Python基础 Python语法 Python数据类型 Python进阶 面向对象 网络编程 并发编程 数据 ...
- Python 全栈开发【第0篇】:目录
Python 全栈开发[第0篇]:目录 第一阶段:Python 开发入门 Python 全栈开发[第一篇]:计算机原理&Linux系统入门 Python 全栈开发[第二篇]:Python基 ...
- Python全栈开发【面向对象】
Python全栈开发[面向对象] 本节内容: 三大编程范式 面向对象设计与面向对象编程 类和对象 静态属性.类方法.静态方法 类组合 继承 多态 封装 三大编程范式 三大编程范式: 1.面向过程编程 ...
随机推荐
- 《深入理解java虚拟机》第三章 垃圾收集器与内存分配策略
第三章 垃圾收集器与内存分配策略 3.1 概述 哪些内存需要回收 何时回收 如何回收 程序计数器.虚拟机栈.本地方法栈3个区域随线程而生灭. java堆和方法区的内存需要回收. 3.2 对象已死吗 ...
- 20155332 2016-2017-2 《Java程序设计》第8周学习总结
20155332 2016-2017-2 <Java程序设计>第8周学习总结 教材学习内容总结 创建Logger对象 static Logger getLogger(String name ...
- android ListView使用
1.DbOpenHelper package dbOpenHelper; import android.content.Context; import android.database.sqlite. ...
- 2017CCPC秦皇岛 E题String of CCPC&&ZOJ3985【模拟】
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3985 题意: 给定一个字符串,由c和p组成,可以添加c或者p. 串中出现一 ...
- MySQL备份可能遇到的坑
MySQL备份工具,支持各种参数选项,使用不同的选项极有可能影响备份处理过程.本文使用我们常规认为合理的备份参数,测试/验证是否存在容易忽视的坑 # 常规备份参数 # mysqldump shell& ...
- mysql 原理 ~ 常规锁
一 模式 RR模式二 mysql锁相关场景 1 有间隙的地方就可能有间隙锁,并非只有辅助索引的场景下才会存在gap lock,典型场景 id主键的范围查询 2 varchar的范围锁定原理和int ...
- Linux注销&登陆
⒈注销 ①在命令行使用logout,此指令在图形界面无效.
- WEBSHELL恶意代码批量提取清除工具
场景 使用D盾扫描到WEBSHELL后可以导出有路径的文本文件. 最后手动去把WEBSHELL复制到桌面然后以文件路径命名,挨个删除. D盾界面是这样的. 手动一个个找WEBSHELL并且改名效率太低 ...
- ARMV8 datasheet学习笔记3:AArch64应用级体系结构之Memory Type and Attributes
1.前言 2. Memory类型和属性 memory分为normal memory和device memory,两种类型的Memory有各自的属性,除了下面介绍的几种属性外,还有其他一些杂项属性 2. ...
- dubbo系列七、dubbo @Activate 注解使用和实现解析
一.用法 Activate注解表示一个扩展是否被激活(使用),可以放在类定义和方法上,dubbo用它在spi扩展类定义上,表示这个扩展实现激活条件和时机. @Activate(group = Cons ...