张旭 2008-1-8
需求
实现LS,PUT,GET,CLOSE命令。
实现多用户并发访问添加配置文件,可以设置端口、主目录及虚拟目录、最大同时访问数、访问日志参照 socket++ 开源项目,用面向对象的方法实现不能同时上传同名文件,上传中的文件不能被下载配置为 Linux 服务,能自动运行支持命令行方式启动服务:start为启动服务、stop为停止服务捕捉全部 FTP 动作,实时显示
知识准备
文件读写操作
目录操作
C++面向对象知识
SOCKET编程:了解不同程序间收发信息的方法,send,resv,了解阻塞。
FTP协议-RFC959 :了解FTP报文书写原则和相关规定。
FTP通信过程 :使用网络通信捕捉工具,观察通信过程。
多线程: 父进程和子进程关系,僵尸进程。
信号:了解各种信号的产生和处理。
进程间通信:共享内存,信号量,消息队列,管道。文件锁。
守护进程
Linux服务配置:etc/init.d目录
系统日志添加方法
程序制作周期
07年12月6日—08年1月8日
开发进度(粗体表示难点)
12月6日,熟悉FTP协议RFC959,配置linux ftp服务。
12月7日,利用科来网络分析系统,观察ftp传输过程。
12月8日,实现简单ftp服务端,可根据不同的请求给出相应答复。多线程知识准备。
12月9日,研究ftp主动、被动传输模式。尝试获取传递信息中的关键信息。
12月10日,研究ftp被动传输模式。研究本机ip地址的获取方法。实现LIST命令的接收和回应。解决端口无法短时间内多次被绑定问题。
12月11日,完成整个ftp传输过程的观测,画出整个工作流程图。
12月12日,实现socket类。实现FTP类。
12月13日,将两个类实例化,实现面向对象ftp基本程序。实现多线程,可以多人同时访问。
12月15日,实现GET命令PUT命令。
12月16日,实现ftp的全部基本功能,LIST,PUT,GET,CLOSE。
12月17日-12月23日,进程间通信的学习,英语四级考试准备。
12月24日-25日,信号量操作的学习,实现PV操作。
12月26日,共享内存的学习,实现PV类。
12月27日,利用PV类实现同时在线人数的控制,学习守护进程相关知识。
12月28日,僵尸进程问题的学习。
12月29日-30日,信号及其通信学习。实现配置文件,实现文件锁功能。
12月30日,实现利用进程间通信控制守护进程的运行。
1月1日,完善FTP服务器及相关子类。增加超时断开连接功能。
1月2日,配置linux服务,设置为开机自动运行程序。
1月3日-7日,期末考试,完善全部功能细节。
1月8日,编写文档和总结。
文件结构
|
config.txt |
配置文件,被main.cpp调用。 |
|
FTPS.cpp |
FTPS类,被main.cpp调用 |
|
FTPS.h |
FTPS类头文件,被FTPS.h 调用。 |
|
main.cpp |
主程序文件,参数: start 开始 stop 停止。守护进程 |
|
mk |
编译shell指令。 |
|
PV.cpp |
PV操作类,被FTPS.cpp调用。 |
|
PV.h |
PV操作类头文件,被PV.cpp调用。 |
|
seeMessage.cpp |
FTP监控程序,输入FTP安装路径,即可开始监控。 |
|
SOCKET.cpp |
套接口类,被FTP.cpp调用。 |
|
SOCKET.h |
套接口类头文件,被SOCKET.cpp调用。 |
本程序安装配置方法
1. 1. 将以上10个文件拷贝到要安装的目录下,假设为 /prefix/。
2. 使用任意文本编译器打开config.txt文件,设置ftp_port(端口号),main_path(FTP默认上传目录),install_path = /prefix/,online_number(最大支持同时在线人数),logfile_path(日志存放地址)。
3. 配置完毕以后,在终端输入 sh /prefix/mk 编译文件,生成”main”程序执行文件。
4. 运行程序:./prefix/main start5. 结束程序:./prefix/main stop
Related posts:





No Comments » 