网络基础(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. 断点续传

  在上传文件的同时,判断服务端是否存在该文件,不存在该文件则上传,存在该文件,检查文件是否完整,不完整就重现从断点开始上传新的内容.

可以解决,由于网速问题,可能一次上传大文件,只上传了一部分,再次上传,从断开的地方继续上传.

 

posted @ 2018-09-07 16:21  葡萄想柠檬  Views(537)  Comments(0)    收藏  举报
目录代码