网络基础(3) + FTP(进度条/计算文件大小/断点续传)
网络基础
1. 什么是端口,为什么会有端口?
端口是为了将同一个电脑上的不同程序进行隔离.
IP是为了找电脑.
端口是为了找电脑上的程序.
示例:
MySQL是一个软件,软件帮助我们在硬盘上进行文件操作。默认端口:3306
Redis是一个软件,软件帮助我们在内存里进行数据操作。默认端口:6379
flask 默认端口的是5000
django默认端口是8000
网站默认端口:80 ,访问时:http://www.baidu.com:80
网站默认端口:443 ,访问时:https://www.baidu.com:443
范围:
端口可以是1 ~ 65535 , 但是1 ~ 1024一般不能用
一般情况下,程序员用的是:8000 8001 ...等等
2. OSI 7层模型

7层: 自己写的代码:自己代码+框架 应用层,使用软件。 打开软件或网站 表示层,看到数据,如图片和视频。 生产数据:szwwd 会话层,保持登录或链接状态。 应用偷偷携带一点其他数据:令牌 19rRNAwf8GVe6xyT9kJPIu5SlQc socket模块: 传输层,TCP/UDP [TCP][szwwd|19rRNAwf8GVe6xyT9kJPIu5SlQc] 网络层,IP 【IP】【[TCP][szwwd|19rRNAwf8GVe6xyT9kJPIu5SlQc]】 数据链路层,MAC [MAC][【IP】【[TCP][szwwd|19rRNAwf8GVe6xyT9kJPIu5SlQc]】] 物理层,将数据转换成电信号发送 5层: 应用层 应用层 表示层 会话层 传输层 网络层 数据链路层 物理层 4层: 应用层 应用层 表示层 会话层 传输层 网络层 物理层 数据链路层 物理层
3. TCP 三次握手 四次挥手
1) socket客户端向服务端发起连接请求: 三次握手
client.connect((....)) #客户端 服务端 #我能打你吗 # 来呀来呀 #好的,我这就来 ----------------------------- client.send('发送数据') #收发数据 收发数据
2) 客户端与服务端断开连接: 四次挥手
client.close() 或 conn.close() #----------------------------- #我要断开连接 #断开就断开,等我处理一些手头的事情 #... #我处理完了,断开吧。 #拜拜
补充: 断开连接,反映到代码上就是: 抛出异常(windows) / 发送空内容(linux)
需要课下学习的内容:
计算机组成原理 / 网络 / 数据结构 / 算法
FTP(文件断点续传)
# 涉及到的小知识点,小功能 - 进度条 - 文件大小 - 断点续传 - CODE - 自定义规范: {'code':1000 } #重点 - 反射 - 其他; - 删除文件/修改文件
1.进度条
print() 打印会自动换行, 设置 end=' ' , 打印不再换行
字符串加 \r 就会清空上次打印的内容,重新打印本次内容. 可用于打印进度条.
示例 1 :
import time print('\r80%',end='') time.sleep(2) # 为了使小锅明显添加的sleep print('\r90%',end='')
示例 2 : 已上传大小 除以 总大小 计算百分比
import time def func(size,total_size): val = int(size/total_size * 100) time.sleep(0.1) print('\r%s%%|%s' %(val,"#"*(val//10),), end='') # 进度条10个 # 号算是100% for i in range(101): func(i,100)
2. 计算文件大小
import os size = os.stat(r'D:\sylar\s15\day31\1.进度条.py').st_size print(size) #size = os.path.getsize(path) # 也可以用该方法
3. 修改文件名称
方法一:
import os
os.rename() 在 py2 + windows系统 中会报错, 在 py3 中不报错 , 只能对文件进行重命名
方法二:
import shutil
shutil.move() 重命名, 在py2 和 py3 中都不报错, 所以一般采用该方法.
并且即能对 文件 又能对 文件夹 进行重命名
shutil.retree() 删除文件夹
import os import shutil # py2 + win:报错 os.rename('a.text','b.txt') # py2+py3 都可以 shutil.move('c.txt','a.txt') # 重命名 shutil.rmtree('D:\sylar\s15\day30') # 删除文件夹
4. 断点续传
在上传文件的同时,判断服务端是否存在该文件,不存在该文件则上传,存在该文件,检查文件是否完整,不完整就重现从断点开始上传新的内容.
可以解决,由于网速问题,可能一次上传大文件,只上传了一部分,再次上传,从断开的地方继续上传.

浙公网安备 33010602011771号