Python案例-网络编程-FTP&断点续传&进度条&上传下载

本文介绍了如何使用Python进行FTP网络编程,实现了文件的上传和下载,特别是断点续传功能,以及客户端的进度条显示。通过详细注释的代码展示了实现这些功能的具体思路,尽管存在一些待调试的bug,但核心功能已成型。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本次ftpV2,完善了上次未完成的代码,实现上传下载,断点续传,客户端任务进度条等功能
废话不多说,上代码,详细解释,请查看代码注释

Server端
#!/usr/bin/env python
#   --coding = utf-8
#   Author Allen Lee
import socketserver,json,os
import subprocess

#创建ftpserver类,并继承socktserver,借用其io多路复用的select方法,以实现多响应用户的并发
class Myftp(socketserver.BaseRequestHandler):
    #再次重写handle方法,由于类的继承中,self遵循自下而上,从左到右的寻址规则,因此被重写的方法将优先被调用
    def handle(self):
        #权限控制
        while True:
            if not self.checkuser():
                break
            else:
                self.request.sendall(bytes('welcome to myftp',encoding='utf-8'))
            while True:
                res_data = self.request.recv(1024).strip()
                if not res_data:
                    break
                #再次统一处理client端发出的json包,
                res_msg = json.loads(str(res_data,encoding='utf-8'))
                #通过反射来引导用户到对应的方法中
                res_tag = res_msg.get('action')
                if hasattr(self,res_tag):
                    getattr(self,res_tag)(res_msg)
                else:break
            self.request.close()
    #用户验证
    def checkuser(self):
        server_tag = False
        res = self.request.recv(1024)
        if len(res) == 0:
            return error
        userinfo = json.loads(str(res,encoding='utf-8'))
        if userinfo[0].get('username') == 'username' and userinfo[0].get('password') == 'password':
            server_tag = True
            return True
        else:
            return False
    def put(self,res_msg):
        file_name = res_msg.get('file_name')
        file_size = res_msg.get('file_size')
        ret = os.path.isfile(file_name)
        if not ret:
            #此为正常传输
            with open(file_name,'wb+')as f:
                self.request.sendall(bytes('ok',encoding='utf-8'))
                recv_data = self.request.recv(1024)
                f.write(recv_data)
        else:
            #此为断点续传处理
            with open(file_name,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值