基于 TCP 协议写的 FTP 管理小工具

这是一个FTP(文件传输协议)管理工具,能够支持文件上传下载以及操作服务端的文件

该工具由客户端和服务端组成。客户端与服务端通过Socket连接实现通信,客户端发送命令,服务端解析并执行相应的操作。部分代码已省略,下面是服务端和客户端代码的详细解释。

GitHub:https://github.com/ITchujian/ftp_manager

服务端

以下是服务端代码中的模块及其功能

  • import shutil:导入shutil模块,提供了高级文件操作支持包括文件复制、删除、移动等功能
  • import sys:导入sys模块,提供了一些与Python解释器及其环境有关的变量和函数
  • import time:导入time模块,提供了与时间相关的函数
  • from threading import Thread:导入Thread类,提供了线程支持
  • from socket import *:导入所有的socket模块的函数和变量,包括socket、AF_INET、SOCK_STREAM等。
  • import os:导入os模块,提供了与操作系统交互的函数

File类的方法

  • ls():返回当前目录下的所有文件文件夹。
  • format(ls_msg: dict):将ls()方法的返回结果格式化为可读字符串。
  • cd(directory):将当前目录更改为directory指定的目录。
  • pwd():返回当前目录路径
  • mkdir(directory):创建名为directory的文件夹。
  • rm(directory):删除名为directory的文件文件夹。

Handle类的方法

  • run():处理客户端的请求,接收并解析客户端发送的命令,调用File类的相应方法进行处理,将处理结果发送给客户端。如果客户端发送了"quit"或"exit"命令,表示客户端主动断开连接,方法退出

接收命令:

客户端

首先是一个基于socket的FTPClient程序中的进度条ProgressBar类。ProgressBar类用于显示FTP客户端上传或下载文件的进度,它可以显示一个进度条,并在文件传输完成时自动退出

ProgressBar 类的初始化

ProgressBar类的构造函数接收四个参数:currenttargettagcount

def __init__(self, current: int, target: int, tag: str = "#", count: int = 100):
        self.current = current
        self.target = target
        self.tag = tag
        self.count = count
        self.loaded = False

其中,current表示当前传输的数据量(单位为字节),target表示总的数据量(单位为字节),tag表示进度条的填充字符(认为“#”),count表示进度条的长度(认为100)。

ProgressBar 类的方法

update(value)

update()方法用于更新进度条的当前值,它接收一个整数参数value,表示需要更新的数据量(单位为字节)。

def update(self, value):
        self.current += value

finished()

finished()方法返回一个布尔值,用于判断文件是否传输完成。

def finished(self) -> bool:
        if self.loaded:
            return self.current >= self.target
        return self.loaded

如果进度条已经加载,就判断当前传输的数据量是否大于等于总的数据量;否则返回loaded属性的值(认为False)。

listen()

listen()方法用于实时显示进度条,并在文件传输完成时自动退出。它使用一个循环来监听数据传输的进度,并根据数据的大小更新进度条的显示方法内部使用time.sleep()函数来降低cpu占用率。

def listen(self):
        part = self.target // self.count + 1
        print("[", end="")
        finished = 0
        while True:
            if finished >= self.count:
                break
            time.sleep(0.01)
            if self.current >= part * (finished + 1):
                print("#", end="")
                finished += 1
        print("]", end="\n")
        self.loaded = True

其中,part表示每个“#”字符代表的数据量大小,finished表示已经完成的进度条长度。

run()

run()方法用于启动listen()方法,并将其作为一个线程运行。

def run(self):
        thread = Thread(target=self.listen)
        thread.start()

ProgressBar类用于FTPClient的上传和下载进度显示,进度条会根据文件传输的进度实时更新,直到文件传输完成。

FTPClient类详解

代码一个FTP客户端,其主要功能包括与FTP服务器建立连接、上传文件、下载文件创建文件夹、删除文件等操作。接下来将对代码中的FTPClient类进行详细讲解。

ProgressBar类

FTPClient类中,有一个名为ProgressBar的类。该类是一个用于进度条显示的类,包括当前进度、目标进度、显示标记显示长度等属性,以及updatefinishedlistenrun方法

listen方法中,使用while True循环来更新进度条,并使用time.sleep()方法来控制更新频率。在每个循环迭代中,根据当前进度和目标进度计算出当前百分比,并根据标记和长度进行输出

run方法中,使用多线程的方式调用listen方法,从而实现进度条的实时更新。

FTPClient类

FTPClient类是整个FTP客户端的核心类。在类中包含一系列方法,用于与FTP服务器进行交互。

属性

FTPClient类中包含一些属性

  • host: FTP服务器的地址
  • port: FTP服务器的端口
  • server_addr: FTP服务器的地址和端口
  • sock: 用于与FTP服务器进行通信的套接
  • download_file: 正在下载的文件
  • event: 用于线程同步的事件

方法

FTPClient类中包含许多方法,下面分别进行介绍。

__connect方法

__connect方法用于连接FTP服务器。在方法中,使用socket库创建一个TCP套接字,并通过该套接字连接FTP服务器。

__stop方法

__stop方法用于断开与FTP服务器的连接。在方法中,关闭TCP套接字,并使用sys.exit()方法退出客户端程序。

run方法

run方法是整个FTP客户端的主要方法。在该方法中,首先调用__connect方法连接FTP服务器,并使用Event对象设置事件。

之后,使用循环来等待用户输入FTP命令。在每次循环中,通过TCP套接字发送用户输入的FTP命令,并根据不同的命令调用不同的方法(如__download__upload等)。

当命令为quitexit时,退出循环并调用__stop方法断开连接。

__send方法

__send方法用于向FTP服务器发送消息。在该方法中,通过TCP套接字发送字符串类型的消息。

__recv方法

__recv方法用于接收FTP服务器返回的消息。在该方法中,使用TCP套接字接收FTP服务器发送的数据,并将数据转换为字符串类型。

__download方法

__download方法用于从FTP服务器下载文件。在该方法中,使用TCP套接字接收FTP服务器发送的文件数据,并将文件数据写入本地

__upload方法

__upload方法用于上传文件到FTP服务器。在该方法中,使用TCP套接字发送文件数据到FTP服务器

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


我最近重新拾起了计算机视觉,借助Python的opencv还有face_recognition库写了个简单的图像识别demo,额外定制了一些内容,原本想打包成exe然后发给朋友,不过在这当中遇到了许多小问题,都解决了,记录一下踩过的坑。 1、Pyinstaller打包过程当中出现warning,跟d
说到Pooling,相信学习过CNN的朋友们都不会感到陌生。Pooling在中文当中的意思是“池化”,在神经网络当中非常常见,通常用的比较多的一种是Max Pooling,具体操作如下图: 结合图像理解,相信你也会大概明白其中的本意。不过Pooling并不是只可以选取2x2的窗口大小,即便是3x3,
记得大一学Python的时候,有一个题目是判断一个数是否是复数。当时觉得比较复杂不好写,就琢磨了一个偷懒的好办法,用异常处理的手段便可以大大程度帮助你简短代码(偷懒)。以下是判断整数和复数的两段小代码: 相信看到这里,你也有所顿悟,能拓展出更多有意思的方法~
文章目录 3 直方图Histogramplot1. 基本直方图的绘制 Basic histogram2. 数据分布与密度信息显示 Control rug and density on seaborn histogram3. 带箱形图的直方图 Histogram with a boxplot on t
文章目录 5 小提琴图Violinplot1. 基础小提琴图绘制 Basic violinplot2. 小提琴图样式自定义 Custom seaborn violinplot3. 小提琴图颜色自定义 Control color of seaborn violinplot4. 分组小提琴图 Group
文章目录 4 核密度图Densityplot1. 基础核密度图绘制 Basic density plot2. 核密度图的区间控制 Control bandwidth of density plot3. 多个变量的核密度图绘制 Density plot of several variables4. 边
首先 import tensorflow as tf tf.argmax(tenso,n)函数会返回tensor中参数指定的维度中的最大值的索引或者向量。当tensor为矩阵返回向量,tensor为向量返回索引号。其中n表示具体参数的维度。 以实际例子为说明: import tensorflow a
seaborn学习笔记章节 seaborn是一个基于matplotlib的Python数据可视化库。seaborn是matplotlib的高级封装,可以绘制有吸引力且信息丰富的统计图形。相对于matplotlib,seaborn语法更简洁,两者关系类似于numpy和pandas之间的关系,seabo
Python ConfigParser教程显示了如何使用ConfigParser在Python中使用配置文件。 文章目录 1 介绍1.1 Python ConfigParser读取文件1.2 Python ConfigParser中的节1.3 Python ConfigParser从字符串中读取数据
1. 处理Excel 电子表格笔记(第12章)(代码下载) 本文主要介绍openpyxl 的2.5.12版处理excel电子表格,原书是2.1.4 版,OpenPyXL 团队会经常发布新版本。不过不用担心,新版本应该在相当长的时间内向后兼容。如果你有新版本,想看看它提供了什么新功能,可以查看Open
1. 发送电子邮件和短信笔记(第16章)(代码下载) 1.1 发送电子邮件 简单邮件传输协议(SMTP)是用于发送电子邮件的协议。SMTP 规定电子邮件应该如何格式化、加密、在邮件服务器之间传递,以及在你点击发送后,计算机要处理的所有其他细节。。但是,你并不需要知道这些技术细节,因为Python 的
文章目录 12 绘图实例(4) Drawing example(4)1. Scatterplot with varying point sizes and hues(relplot)2. Scatterplot with categorical variables(swarmplot)3. Scat
文章目录 10 绘图实例(2) Drawing example(2)1. Grouped violinplots with split violins(violinplot)2. Annotated heatmaps(heatmap)3. Hexbin plot with marginal dist
文章目录 9 绘图实例(1) Drawing example(1)1. Anscombe’s quartet(lmplot)2. Color palette choices(barplot)3. Different cubehelix palettes(kdeplot)4. Distribution
Python装饰器教程展示了如何在Python中使用装饰器基本功能。 文章目录 1 使用教程1.1 Python装饰器简单示例1.2 带@符号的Python装饰器1.3 用参数修饰函数1.4 Python装饰器修改数据1.5 Python多层装饰器1.6 Python装饰器计时示例 2 参考 1 使
1. 用GUI 自动化控制键盘和鼠标第18章 (代码下载) pyautogui模块可以向Windows、OS X 和Linux 发送虚拟按键和鼠标点击。根据使用的操作系统,在安装pyautogui之前,可能需要安装一些其他模块。 Windows: 不需要安装其他模块。OS X: sudo pip3
文章目录 生成文件目录结构多图合并找出文件夹中相似图像 生成文件目录结构 生成文件夹或文件的目录结构,并保存结果。可选是否滤除目录,特定文件以及可以设定最大查找文件结构深度。效果如下: root:[z:/] |--a.py |--image | |--cat1.jpg | |--cat2.jpg |
文章目录 VENN DIAGRAM(维恩图)1. 具有2个分组的基本的维恩图 Venn diagram with 2 groups2. 具有3个组的基本维恩图 Venn diagram with 3 groups3. 自定义维恩图 Custom Venn diagram4. 精致的维恩图 Elabo
mxnet60分钟入门Gluon教程代码下载,适合做过深度学习的人使用。入门教程地址: https://beta.mxnet.io/guide/getting-started/crash-course/index.html mxnet安装方法:pip install mxnet 1 在mxnet中使
文章目录 1 安装2 快速入门2.1 基本用法2.2 输出图像格式2.3 图像style设置2.4 属性2.5 子图和聚类 3 实例4 如何进一步使用python graphviz Graphviz是一款能够自动排版的流程图绘图软件。python graphviz则是graphviz的python实