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去处理,代码如下:

posted @ 2017-01-16 21:48  打不死的--蟑螂  阅读(798)  评论(0编辑  收藏  举报