python初学——网络编程之FTP服务器

MYFTP是我写的模拟FTP服务端和客户端交互的程序。经过使用socket去模拟ftp的文件下载与上次两个核心功能。并非使用真实FTP协议去实现。python

基本需求

  1. 用户加密认证 # hashlib模块对用户名密码进行加密。
  2. 容许同时多用户登陆
  3. 每一个用户有本身的家目录,且只能访问本身的家目录 # 使用用户名在配置文件的固定目录中添加用户名的目录。并能够实现ls,dir功能
  4. 对用户进行磁盘配额,每一个用户的可用空间不一样 # 使用os模块检查用户目录的空间+上文件大小,若是大于quota就不让传输。
  5. 容许用户在ftp server上随意切换目录 cd功能 记录用户输入的目录,进行目录的拼接。
  6. 容许用户查看当前目录下文件 ls功能
  7. 容许上传和下载文件,保证文件一致性(md5)
  8. 文件传输过程当中显示进度条
  9. 附加功能:支持文件的断点续传。比较客户端文件与服务端文件的bytes,若是不一致。客户端、服务端就使用文件seek方法移动光标。续传。

需求模型

用例名

MYFTPlinux

场景

  • when:任意时间
  • where:任何地点
  • who:FTP用户

用例描述

  • ftp使用用户名密码登陆。密码须要加密认证、容许支持多用户登陆。
  • 每一个用户有本身的家目录,全部的访问必须限制在用户的家目录。但在家目录中建立的目录能够进行目录切换。
  • 用户的目录有磁盘配额。不容许超过磁盘配额。
  • 用户能够查看当前目录下的文件列表。
  • 用户能够上传和下载文件,而且保证文件的一致性。
  • 文件的传输过程当中显示精度条。
  • 支持断点续传。

用户价值

实现一套本身的FTP服务端与客户端。git

约束

暂无github

建模设计

UML图

顺序图

  1. 登陆顺序图
    图片描述
  2. 上传顺序图

程序讲解

程序主体

请从github下载后使用
MYFTP
README数据库

目录结构

+---bin                     # 执行程序目录
|       create_user.py      # 建立用户程序
|       myftpc.py           # ftp_server启动程序
|       myftps.py           # ftp_client启动程序
|       __init__.py
|
+---conf
|   |   settings.py         # 配置文件
|   |   __init__.py
|   |
|   \---__pycache__
|
+---core
|   |   logger.py           # 日志生成文件
|   |   main.py             # 主程序文件
|   |   __init__.py 
|   |
|   \---__pycache__
|
+---db                      # 数据库目录
|   \---accounts            # 帐号表目录
|---id_user_rs.json         # 帐号ID与用户名对应关系
+---file_upload             # ftp文件服务器目录
+---lib                     # 类文件
|   |   account.py          # 帐号类
|   |   db.py               # 数据库类
|   |   myftp_client.py     # ftp客户端类
|   |   myftp_server.py     # ftp服务端类
|   |   process.py          # 进度条展现类(暂时未使用)
|   |   __init__.py
|   |
|   \---__pycache__
\---log
        __init__.py

环境

本系统基于python 3.6版本开发。可运行在安装了python 3.6版本的linux或windows系统中。json

用法

建立FTP用户

进入bin目录:windows

> cd bin

执行create_user.py:服务器

> python ./create_user.py
Account:test2       # 用户名
Password:test2      # 密码
Home directory(test2):    # 帐号的根目录。默认为帐号名称
Quota(bytes):10           # 帐号的quota。默认为1G

===================ACCOUNT INFO===================
             Account:      test2
             Home Dir:     test2
             Quota:        10
==================================================

启动ftp服务端

进入bin目录:socket

> cd bin

执行create_user.py:加密

> python ./myftps.py

启动ftp客户端

进入bin目录:

> cd bin

执行create_user.py:

> python ./myftpc.py

FTP用于登陆:

Name:test2
Password:test2
Account [test2] login successful
ftp>:

客户端命令

  1. ls: 查看用户当前目录的文件和目录列表

    ftp>: ls
      驱动器 D 中的卷是 新加卷
      卷的序列号是 020D-6062
     
      D:\deployment\MYFTP\file_upload\test2 的目录
     
     2018/04/16  12:17    <DIR>          .
     2018/04/16  12:17    <DIR>          ..
                    0 个文件              0 字节
                    2 个目录 45,605,543,936 可用字节
     Directory [test2] list successful.
     ftp>:
  2. pwd: 查看当前所在目录

    ftp>: pwd
    Directory [\] show successful.
  3. mdir: 建立目录

    ftp>: mdir temp_dir
     Directory [temp_dir] create successful.
  4. cd:切换目录

    ftp>: cd temp_dir
    Directory [temp_dir] change successful.
  5. put: 上传文件-支持断点续传

    ftp>: get temp_file.md
    Start download -----> temp_file.md
    trandata: %s b'test123'
    [>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>]100% recvsize:7, filesize:7
    File [temp_file.md] download successful.
  6. get: 下载文件-支持断点续传

    ftp>: put temp_file.md
    [>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>]100%
    File [temp_file.md] upload successful.
相关文章
相关标签/搜索