Python之Ftp作业(断点续传未完成)

这篇博客介绍了Python实现FTP作业的需求,包括用户加密认证、多用户登录、磁盘配额、目录切换、文件查看、上传下载等功能。其中,文件的断点续传功能尚未完成。博客重点解析了作业的结构和使用的技术,如hashlib、json、socketserver等,并推荐了一个详细讲解FTP的网址作为参考。
摘要由CSDN通过智能技术生成

一、作业需求

要求:
用户加密认证 1
允许同时多用户登录 1
每个用户有自己的家目录 ,且只能访问自己的家目录 1
对用户进行磁盘配额,每个用户的可用空间不同
允许用户在ftp server上随意切换目录 1
允许用户查看当前目录下文件 1
允许上传和下载文件,保证文件一致性 1
文件传输过程中显示进度条 1
附加功能:支持文件的断点续传---------------------未完成

二、作业分析

> 大致结构

client
在这里插入图片描述

server
在这里插入图片描述

> 各个点的解释

在这个作业中呢,用到了很多知识点,比如用户加密认证、加密传送文件都用到了hashlib模块;保存用户信息,传递一些字典用到了json模块;多用户同时在线用到了socketserver模块;还有一些命令的操作,用到了os.popen()函数;还有一些有关路径的函数,什么的。。。诶,好像也没用到好多哈。。。对了还有反射,这个非常重要。其他就没什么的了,,具体看下面的一个网站:

推荐这个网址:点开即可

这里面讲的都挺详细的,正式因为看到这个才会有点思路写,推荐去看一下。

> client代码

main

import socket,hashlib,json,os ,sys
base_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
print(base_dir)
sys.path.append(base_dir) # 添加conf文件的路径\\

from conf import config
from core import put, auth, ls, cd, mkdir


httpCode = """
"200" : "服务器成功返回网页"
"404" : "请求的网页不存在"
"403" : "出现错误"
"503" : "服务不可用"
 """


class FtpClient(object):
    def __init__(self):
        self.client = socket.socket()   # 创建一个socket客户端
        self.userMessDirt = {
   }
    def connect(self,host,port):
        self.client.connect((host, port))    # 客户端和服务器端进行连接
    def help(self):
        msg = '''
                ls
                pwd
                cd ../..
                get filename
                put filename
                '''
        print(msg)
    def interactive(self):
        self.userMessDirt = json.loads(self.client.recv(config.buffer).decode())
        self.localDir = os.path.basename(self.userMessDirt["homeDir"])  # 初始地址
        while True:
            cmd_str = input("[%s@user %s] #" %(self.userMessDirt["userName"], self.localDir))
            if len(cmd_str) ==0:continue
            cmd = cmd_str.split()[0]
            if hasattr(self,"cmd_%s" % cmd):
                func = getattr(self, "cmd_%s" % cmd)
                func(cmd_str)
            else:
                self.help()
    def cmd_ls(self, *args):
        '''客户端实现打印出该目录下的所有文件'''
        ls.ls(self, *args)

    def cmd_pwd(self, *args):
        '''客户端实现打印出当前目录功能'''
        pass
    def cmd_cd(self, *args):
        '''客户端实现切换目录功能'''
        cd.cd(self, *args)
    def cmd_get(self, *args):
        '''客户端下载文件'''
        pass
    def cmd_put(self, *args):
        '''客户端上传文件'''
        put.cmd_put(self,*args)
    def cmd_mkdir(self, *args):
        '''创建一个空文件夹'''
        mkdir.mkdir(self, *args)
    def auth_login(self):
        auth.auth_login(self)

    def auth_register(self):
        auth.auth_register(self)


def run():
    info = """
    1.登录
    2.注册
    >>:"""
    auth_choice = input(info).strip()
    ftp = FtpClient()
    ftp.connect("localhost",9090)
    if auth_choice == "1":
        ftp.auth_login()
    else:
        ftp.auth_register()
    ftp.interactive()

client.auth:

import hashlib, os, sys
base_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
from conf import config

def auth_login(self):
    self.client.send("login".encode("utf-8"))  # 通知对面我要登录了
    loginErrorCount = 3
    while True:
        userName_input = self.client.recv(config.buffer)
        userName = input(userName_input.decode()).strip()
        self.client.send(userName.encode("utf-8"))  # 注意这里的编码问题
        httpCode = self.client.recv(config.buffer).decode()
        if httpCode == "403":
            print("用户名错误,请重新输入")
        elif httpCode == "200":
            break
    while loginErrorCount
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值