📄 readme.txt
字号:
类说明:
CFtpServer -- ftp服务器类,提供简单的服务器启动函数Start()。
CMySocket -- 套接字基类,完成网络通讯的基本功能,CCtrlSocket
和CDataSocket都派生于此。
CCtrlSocket -- 控制通道类,大部分的工作集中在此类中,CFtpServer
在Start()中循环,每接收一个客户端的连接,就
派生一个子进程和一个CCtrlSocket对象,由CCtrlSocket
对象在子进程中处理与客户端的通讯工作。
CDataSocket -- 数据通道类,CCtrlSocket中包含一个CDataSocket的
成员对象,CCtrlSocket在处理客户的命令过程中,
如果需要数据通道,将调用CDataSocket成员对象的Run函数,
开启一个由CDataSocket包装的子线程,建立数据通道,
完成文件列表、文件上传、文件下载的工作。
CFtpUser -- 用户权限与文件管理类,CCtrlSocket包含有一个CFtpUser
的成员对象,如果CCtrlSocket需要操作本地文件,
验证用户权限,将调用CFtpUser对象的成员函数。
文件说明:
FtpServer.cpp、FtpServer.h
-- 定义CFtpServer类的头文件和源文件
CtrlSocket.cpp、CCtrlSocket.h
-- 定义CCtrlSocket类的头文件和源文件
DataSocket.cpp、DataSocket.h
-- 定义CDataSocket类的头文件和源文件
FtpUser.cpp、FtpUser.h
-- 定义CFtpUser类的头文件和源文件
Public.cpp、Public.h
-- 对一些库函数头文件的包含
Tools.cpp、Tools.h
-- 对一些常用的工具函数的包装,并且包装到了名字空间
Tools中
ftpsvr.cfg
-- 服务器启动时的配置参数文件
FtpUser.sql
-- 用于用户和文件权限验证的表结构已经示例数据脚本
readme.txt
-- 说明文档
ftpsvr.prj、ftpsvr.wsp
-- 用于继承编辑环境Magic C++的项目组织文件
几点注意:
1、应该要有僵尸进程清理机制,参看类CFtpServer;
2、任何时候不要假定客户端一次能够传送一个完整的命令过来,
所以服务器端应该要建立接收缓冲区来解析客户命令,参看
类CCtrlSocket;
3、数据通道在传输数据过程中,控制通道要能够正常工作,参看
类CCtrlSocket和类CDataSocket;
4、在PASV模式下的数据通道建立,服务器端需要调用accept等待
客户端连接,此时要考虑客户端永不连接过来的极端情况,参看类
CDataSocket的Connect()成员函数
5、在CCtrlSocket中用到了成员指针,不熟悉的话参看红皮书。
使用方式:
1、建议采用Magic C++做为集成编辑环境,我文件夹里面有ftpsvr.prj和ftpsvr.wsp
文件,他们是Magic C++类型的项目管理文件,相当于VC++的dsp/dsw
2、缺省情况下侦听端口号是2121,如果要改为21,请修改ftpsvr.cfg,并以root身份运行;
3、该ftpsvr设计为用MySQL进行用户验证和文件权限验证,在运行前首先要搭建好MySQL环境、
环境、表结构和测试数据,具体操作可根据ftpsvr.sql提示进行,并且ftpsvr.cfg中与MySQL
相关的配置要正确。MySQL的安装我采用的是下列安装包,需要的话可以去网上免费下载
MySQL-server-5.0.18-0.i386.rpm //MySQL服务器安装包
MySQL-client-5.0.18-0.i386.rpm //MySQL客户端安装包
MySQL-devel-5.0.18-0.i386.rpm //MySQL客户端C语言开发接口包
但是为了调试方便,提供非MySQL支持的版本,具体操作为:将文件FtpUser.cpp_NonMySQL和
makefile_NonMySQL分别改名,覆盖原来的文件FtpUser.cpp和makefile,再编译就可以了。
4、直接make编译或者在Magic C++环境下编译、运行ftpsvr.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -