一、开发环境
server端:centos 7 python-3.6.2
客户端:Windows 7 python-3.6.2 pycharm-2018
程序目的:1、学习使用socketserver实现并发处理多个客户端。
2、了解使用struct解决TCP粘包。
二、程序设计
(本人菜鸟一枚,对于开发规范,接口设计完全不懂,完全是随心所欲,自娱自乐。写博客主要是记录自己学习的点点滴滴,如有不足之处还请见谅。)
1、server端
1.1 目录结构如下:
1.2 目录简介:
FTP_SERVER:程序主目录
app:程序主逻辑目录,目录下有四个模块:
FTPserver.py:FTP Server端启动入口。
login.py:认证注册模块,用于处理用户注册,登录认证。
dataAnalysis.py:命令解析模块,负责解析,执行客户端命令。
FileOpertion.py:负责文件读,写。数据发送,数据接收。
db:存放user_pwd.db文件,用于存放用户信息(用户名,密码,FTP目录总空间,已使用空间等)
lib:存放公共数据。
1.3 模块中类的继承关系
1.4 执行流程
1.4.1 程序启动文件FTPserver.py,程序启动后进入监听状态。核心代码如下:
class MyFtpServer(socketserver.BaseRequestHandler): def handle(self): # 重写handle方法,处理socket请求 print(f"连接来自{self.client_address}的客户端") commom_obj = Commom() data_analy = DataAnalysis() login_obj = Login() while 1: # 执行用户选项:1、登陆系统 2、注册账号。并返回一个结果 status_id = login_obj.run_client_choice(self.request, commom_obj) if status_id == "01": # 登陆成功 if not self.run_ftp_server(data_analy,commom_obj): # 执行ftpserver主功能 break elif int(status_id) == -1: # client断开连接了 break print(f"客户端{self.client_address}断开了连接") def run_ftp_server(self,data_analy,commom_obj): """" 登陆成功后,接收客户端发来的命令,并进行处理 :param data_analy:负责解析,执行客户端命令的对