• python 写一个FTPsever 和FTPclient


    作业要求:

    1.     用户加密认证

    2.     允许同时多用户登录

    3.     每个用户有自己的家目录 ,且只能访问自己的家目录

    4.     对用户进行磁盘配额,每个用户的可用空间不同

    5.     允许用户在ftp server上随意切换目录

    6.     允许用户查看当前目录下文件

    7.     允许上传和下载文件,保证文件一致性

    8.     文件传输过程中显示进度条

    9.     附加功能:支持文件的断点续传

    作业分析:

    1.     用户加密认证

      客户端给服务端发生账号密码认证即可,认证成功进入即可,再安全就链接后验证一下客户端的一个编码

       2.   允许同时多用户登录

            服务端需要使用多进程,使用socketserver即可

       3.   每个用户有自己的家目录 ,且只能访问自己的家目录

            服务端使用用户登录成功后,默认执行cd 每个用户的家目录,执行命令时候是不需要真的去执行cd命令的.

    class Userinfo:
        '''
        每次验证就会创建一个次类的对象,登录成功将下方构造信息初始化,
        默认传入一个conn即可,由服务端链接去创建,并调用此处的逻辑
        '''
        def __init__(self, conn):
            self.conn = conn
            self.has_info = False  # 用户是否登录
            self.username = None  # 用户账号
            self.home = None  # 用户家目录路径
            self.size = None  # 用户空间大小
            self.use_size = None  # 用户已经使用空间
            self.path = None  # 用户操作的路径
            self.root = None  # 当前用户操作的目录
        def login(self):
            '''用户认证逻辑'''
            pass
        def post(self):
            '''上传文件逻辑'''
            pass
        def get(self):
            '''下载文件逻辑'''
            pass
        def commod(self):
            '''执行命令'''
            pass
    

    注意:在返回的时候不能将一个绝对路径返回,只能返回一个以家目录为根之后的路径,如:[/alex]   

    4.    对用户进行磁盘配额,每个用户的可用空间不同

    在用户配置文件设定文件夹大小和已经使用的大小,每次传文件的大小就需要判断是否超出值,超出报错,没超出就可以接收文件

      5.    允许用户在ftp server上随意切换目录

    每个用户登录后默认进入到自己的家目录,在执行cd 命令的时候,将家目录后面的文件夹返回即可。如果是家目录就不执行,返回一个0即可。

    1.     允许用户查看当前目录下文件

      每个进程执行自己命令dir显示当前用户的文件夹下内容。

    2.     允许上传和下载文件,保证文件一致性

      上传和下载基础,上传时候MD5计算下,传输完毕再验证下即可!

    3.     文件传输过程中显示进度条

      写一个函数打印百分百和进度条,将已传文件大小和总文件大小传给函数打印即可

    4.     附加功能:支持文件的断点续传

      判断上传文件是否存在,如果存在判断长度是多少,如果没有传过来的文件大,将服务端的长度发给客户端,客户端将光标移到文件位置继续读取,开始传送。

    FTP规划

    1. 用户配置文件,家目录默认使用用户名称

      [username]

      pasw = password #用户密码

      space_size=500000 #总共的大小

      use_size = 0 #使用的大小

      opentime = 2016-01-01 #开通时间

      duetime= 2017-12-31   #到期时间

    2. 服务端命令集

      post 上传 使用格式:post|file/path|默认为家目录下,/代表家目录,如果没有将创建  

      get   下载 使用格式:get|file/path|本地文件夹的绝对路径,默认为当前目录

      cd/dir  目录查看命令 返回当前目录

    3. 使用socketserver搭建tcp服务端

            cd.. 返回上一级目录 

            cd dirname 进入dirname路径  如果没有这个dir 返回一个错误值

            cd / 返回家目录   直接返回家目录即可

            以上为cd 命令的常用方法,固我需要固定每个用户登录后的家目录,需要确定每次执行后的目录即可,固用class去处理,代码如下:

  • 相关阅读:
    Spring Boot 入门
    门罗币(MONERO)钱包生成教程
    数据库 一对多,多对多 表设计
    使用nginx+lua脚本读写redis缓存
    在Spring MVC中使用注解的方式校验RequestParams
    MySQL命名、设计及使用规范《MySQL命名、设计及使用规范》
    Mycat分表分库
    Go在Ubuntu 14.04 64位上的安装过程
    Android获取设备屏幕宽高像素值的两个方法
    php_curl.dll libssh2.dll 始终无法加载的原因 及解决办法
  • 原文地址:https://www.cnblogs.com/huangjinshan/p/6291145.html
Copyright © 2020-2023  润新知