ToB企服应用市场:ToB评测及商务社交产业平台

标题: 【闲暇一写】基于TCP协议写的FTP管理工具 [打印本页]

作者: 勿忘初心做自己    时间: 2023-10-9 10:27
标题: 【闲暇一写】基于TCP协议写的FTP管理工具
这是一个FTP(文件传输协议)管理工具,能够支持文件上传下载以及操作服务端的文件。
该工具由客户端和服务端组成。客户端与服务端通过Socket连接实现通信,客户端发送命令,服务端解析并执行相应的操作。部分代码已省略,下面是服务端和客户端代码的详细解释。
GitHub:https://github.com/ITchujian/ftp_manager
服务端

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

File类的方法:

Handle类的方法:

接收命令:

客户端

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

ProgressBar类的构造函数接收四个参数:current、target、tag和count。
  1. def __init__(self, current: int, target: int, tag: str = "#", count: int = 100):
  2.         self.current = current
  3.         self.target = target
  4.         self.tag = tag
  5.         self.count = count
  6.         self.loaded = False
复制代码
其中,current表示当前传输的数据量(单位为字节),target表示总的数据量(单位为字节),tag表示进度条的填充字符(默认为“#”),count表示进度条的长度(默认为100)。
ProgressBar 类的方法

update(value)

update()方法用于更新进度条的当前值,它接收一个整数参数value,表示需要更新的数据量(单位为字节)。
  1. def update(self, value):
  2.         self.current += value
复制代码
finished()

finished()方法返回一个布尔值,用于判断文件是否传输完成。
  1. def finished(self) -> bool:
  2.         if self.loaded:
  3.             return self.current >= self.target
  4.         return self.loaded
复制代码
如果进度条已经加载,就判断当前传输的数据量是否大于等于总的数据量;否则返回loaded属性的值(默认为False)。
listen()

listen()方法用于实时显示进度条,并在文件传输完成时自动退出。它使用一个循环来监听数据传输的进度,并根据数据的大小更新进度条的显示。方法内部使用time.sleep()函数来降低CPU占用率。
  1. def listen(self):
  2.         part = self.target // self.count + 1
  3.         print("[", end="")
  4.         finished = 0
  5.         while True:
  6.             if finished >= self.count:
  7.                 break
  8.             time.sleep(0.01)
  9.             if self.current >= part * (finished + 1):
  10.                 print("#", end="")
  11.                 finished += 1
  12.         print("]", end="\n")
  13.         self.loaded = True
复制代码
其中,part表示每个“#”字符代表的数据量大小,finished表示已经完成的进度条长度。
run()

run()方法用于启动listen()方法,并将其作为一个线程运行。
  1. def run(self):
  2.         thread = Thread(target=self.listen)
  3.         thread.start()
复制代码
ProgressBar类用于FTPClient的上传和下载进度显示,进度条会根据文件传输的进度实时更新,直到文件传输完成。
FTPClient类详解

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

在FTPClient类中,有一个名为ProgressBar的类。该类是一个用于进度条显示的类,包括当前进度、目标进度、显示标记、显示长度等属性,以及update、finished、listen、run等方法。
在listen方法中,使用while True循环来更新进度条,并使用time.sleep()方法来控制更新频率。在每个循环迭代中,根据当前进度和目标进度计算出当前百分比,并根据标记和长度进行输出。
在run方法中,使用多线程的方式调用listen方法,从而实现进度条的实时更新。
FTPClient类

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

FTPClient类中包含一些属性:
方法

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

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

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

run方法是整个FTP客户端的主要方法。在该方法中,首先调用__connect方法连接FTP服务器,并使用Event对象设置事件。
之后,使用循环来等待用户输入FTP命令。在每次循环中,通过TCP套接字发送用户输入的FTP命令,并根据不同的命令调用不同的方法(如__download、__upload等)。
当命令为quit或exit时,退出循环并调用__stop方法断开连接。
__send方法

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

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

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

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

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4