<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Hardy.九日志 &#187; FTP</title>
	<atom:link href="http://www.9ri.net/blog/tag/ftp/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.9ri.net</link>
	<description>没什么改变不了的</description>
	<lastBuildDate>Sun, 29 Aug 2010 08:56:08 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>FTP server 制作总结</title>
		<link>http://www.9ri.net/blog/ftp-server-%e5%88%b6%e4%bd%9c%e6%80%bb%e7%bb%93%e6%97%a7%e6%96%87/</link>
		<comments>http://www.9ri.net/blog/ftp-server-%e5%88%b6%e4%bd%9c%e6%80%bb%e7%bb%93%e6%97%a7%e6%96%87/#comments</comments>
		<pubDate>Mon, 28 Jan 2008 07:37:23 +0000</pubDate>
		<dc:creator>Hardy</dc:creator>
				<category><![CDATA[与IT沾边]]></category>
		<category><![CDATA[我是工作狂]]></category>
		<category><![CDATA[FTP]]></category>
		<category><![CDATA[server]]></category>
		<category><![CDATA[总结]]></category>

		<guid isPermaLink="false">http://blog.9ri.net/archives/88</guid>
		<description><![CDATA[张旭 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:枚举,typedef,预处理
stat.h头文件，轻松获取文件属性。
用STL快速编写ini配置文件识别类



Related posts:<ol><li><a href='http://www.9ri.net/blog/%e6%9e%9a%e4%b8%betypedef%e9%a2%84%e5%a4%84%e7%90%86/' rel='bookmark' title='Permanent Link: 枚举,typedef,预处理'>枚举,typedef,预处理</a></li>
<li><a href='http://www.9ri.net/blog/stath%e5%a4%b4%e6%96%87%e4%bb%b6%ef%bc%8c%e8%bd%bb%e6%9d%be%e8%8e%b7%e5%8f%96%e6%96%87%e4%bb%b6%e5%b1%9e%e6%80%a7%e3%80%82/' rel='bookmark' title='Permanent Link: stat.h头文件，轻松获取文件属性。'>stat.h头文件，轻松获取文件属性。</a></li>
<li><a href='http://www.9ri.net/blog/%e7%94%a8stl%e5%bf%ab%e9%80%9f%e7%bc%96%e5%86%99ini%e9%85%8d%e7%bd%ae%e6%96%87%e4%bb%b6%e8%af%86%e5%88%ab%e7%b1%bb/' rel='bookmark' title='Permanent Link: 用STL快速编写ini配置文件识别类'>用STL快速编写ini配置文件识别类</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p><span>张旭</span><span><font face="Times New Roman"> <span>2008-1-8</span></font></span></p>
<p><span><font face="Times New Roman"><span></span><span></span></font></span><strong><span>需求</span><span></span></strong></p>
<p class="MsoNormal"><span>实现</span><span><font face="Times New Roman">LS</font></span><span>，</span><span><font face="Times New Roman">PUT</font></span><span>，</span><span><font face="Times New Roman">GET</font></span><span>，</span><span><font face="Times New Roman">CLOSE</font></span><span>命令。</span></p>
<p><span>实现多用户并发访问</span><span>添加配置文件，可以设置端口、主目录及虚拟目录、最大同时访问数、访问日志</span><span>参照 socket++ 开源项目，用面向对象的方法实现</span><span>不能同时上传同名文件，上传中的文件不能被下载</span><span>配置为 Linux 服务，能自动运行</span><span>支持命令行方式启动服务：start为启动服务、stop为停止服务</span><span>捕捉全部 FTP 动作，实时显示</span></p>
<p><span></span><strong><span>知识准备</span><span></span></strong></p>
<p class="MsoNormal"><span>文件读写操作</span></p>
<p class="MsoNormal"><span>目录操作</span></p>
<p class="MsoNormal"><span><font face="Times New Roman">C++</font></span><span>面向对象知识</span></p>
<p class="MsoNormal"><span><font face="Times New Roman">SOCKET</font></span><span>编程：了解不同程序间收发信息的方法，</span><span><font face="Times New Roman">send</font></span><span>，</span><span><font face="Times New Roman">resv</font></span><span>，了解阻塞。</span></p>
<p class="MsoNormal"><span><font face="Times New Roman">FTP</font></span><span>协议</span><span><font face="Times New Roman">-RFC959 </font></span><span>：了解</span><span><font face="Times New Roman">FTP</font></span><span>报文书写原则和相关规定。</span></p>
<p class="MsoNormal"><span><font face="Times New Roman">FTP</font></span><span>通信过程</span><font face="Times New Roman"> </font><span>：使用网络通信捕捉工具，观察通信过程。</span></p>
<p class="MsoNormal"><span>多线程：</span><font face="Times New Roman"> </font><span>父进程和子进程关系，僵尸进程。</span></p>
<p class="MsoNormal"><span>信号：了解各种信号的产生和处理。</span></p>
<p class="MsoNormal"><span>进程间通信：共享内存，信号量，消息队列，管道。文件锁。</span></p>
<p class="MsoNormal"><span>守护进程</span></p>
<p class="MsoNormal"><span><font face="Times New Roman">Linux</font></span><span>服务配置：</span><span><font face="Times New Roman">etc/init.d</font></span><span>目录</span></p>
<p class="MsoNormal"><span>系统日志添加方法</span></p>
<p><strong><span>程序制作周期</span><span></span></strong></p>
<p class="MsoNormal"><span><font face="Times New Roman">07</font></span><span>年</span><span><font face="Times New Roman">12</font></span><span>月</span><span><font face="Times New Roman">6</font></span><span>日</span><span><font face="Times New Roman">—</font><font face="Times New Roman">08</font><span><span>年</span></span><font face="Times New Roman">1</font><span><span>月</span></span><font face="Times New Roman">8</font><span><span>日</span></span></span></p>
<p><strong><span>开发进度（粗体表示难点）</span><span></span></strong></p>
<p class="MsoNormal"><span><font face="Times New Roman">12</font></span><span>月</span><span><font face="Times New Roman">6</font></span><span>日</span><span>，<strong>熟悉</strong></span><strong><span><font face="Times New Roman">FTP</font></span></strong><strong><span>协议</span><span><font face="Times New Roman">RFC959</font></span></strong><span>，配置</span><span><font face="Times New Roman">linux ftp</font></span><span>服务。</span></p>
<p class="MsoNormal"><span><font face="Times New Roman">12</font></span><span>月</span><span><font face="Times New Roman">7</font></span><span>日</span><span>，利用科来网络分析系统，观察</span><span><font face="Times New Roman">ftp</font></span><span>传输过程。</span></p>
<p class="MsoNormal"><span><font face="Times New Roman">12</font></span><span>月</span><span><font face="Times New Roman">8</font></span><span>日</span><span>，实现简单</span><span><font face="Times New Roman">ftp</font></span><span>服务端，可根据不同的请求给出相应答复。多线程知识准备。</span></p>
<p class="MsoNormal"><span><font face="Times New Roman">12</font></span><span>月</span><span><font face="Times New Roman">9</font></span><span>日</span><span>，研究</span><span><font face="Times New Roman">ftp</font></span><span>主动、被动传输模式。尝试获取传递信息中的关键信息。</span></p>
<p class="MsoNormal"><span><font face="Times New Roman">12</font></span><span>月</span><span><font face="Times New Roman">10</font></span><span>日</span><span>，研究</span><span><font face="Times New Roman">ftp</font></span><span>被动传输模式。<strong>研究本机</strong></span><strong><span><font face="Times New Roman">ip</font></span></strong><strong><span>地址的获取方法</span></strong><span>。实现</span><span><font face="Times New Roman">LIST</font></span><span>命令的接收和回应。解决端口无法短时间内多次被绑定问题。</span></p>
<p class="MsoNormal"><span><font face="Times New Roman">12</font></span><span>月</span><span><font face="Times New Roman">11</font></span><span>日</span><span>，完成整个</span><span><font face="Times New Roman">ftp</font></span><span>传输过程的观测，画出整个工作流程图。</span></p>
<p class="MsoNormal"><span><font face="Times New Roman">12</font></span><span>月</span><span><font face="Times New Roman">12</font></span><span>日</span><span>，实现</span><span><font face="Times New Roman">socket</font></span><span>类。实现</span><span><font face="Times New Roman">FTP</font></span><span>类。</span></p>
<p class="MsoNormal"><span><font face="Times New Roman">12</font></span><span>月</span><span><font face="Times New Roman">13</font></span><span>日</span><span>，将两个类实例化，实现面向对象</span><span><font face="Times New Roman">ftp</font></span><span>基本程序。实现多线程，可以多人同时访问。</span></p>
<p class="MsoNormal"><span><font face="Times New Roman">12</font></span><span>月</span><span><font face="Times New Roman">15</font></span><span>日</span><span>，<strong>实现</strong></span><strong><span><font face="Times New Roman">GET</font></span></strong><strong><span>命令</span><span><font face="Times New Roman">PUT</font></span></strong><strong><span>命令</span></strong><span>。</span></p>
<p class="MsoNormal"><span><font face="Times New Roman">12</font></span><span>月</span><span><font face="Times New Roman">16</font></span><span>日</span><span>，实现</span><span><font face="Times New Roman">ftp</font></span><span>的全部基本功能，</span><span><font face="Times New Roman">LIST</font></span><span>，</span><span><font face="Times New Roman">PUT</font></span><span>，</span><span><font face="Times New Roman">GET</font></span><span>，</span><span><font face="Times New Roman">CLOSE</font></span><span>。</span></p>
<p class="MsoNormal"><span><font face="Times New Roman">12</font></span><span>月</span><span><font face="Times New Roman">17</font></span><span>日</span><span><font face="Times New Roman">-</font><font face="Times New Roman">12</font><span><span>月</span></span><font face="Times New Roman">23</font><span><span>日</span></span><span>，</span></span><strong><span>进程间通信的学习</span></strong><span>，英语四级考试准备。</span></p>
<p class="MsoNormal"><span><font face="Times New Roman">12</font></span><span>月</span><span><font face="Times New Roman">24</font></span><span>日</span><span><font face="Times New Roman">-25</font></span><span>日，<strong>信号量操作的学习，实现</strong></span><strong><span><font face="Times New Roman">PV</font></span></strong><strong><span>操作</span></strong><span>。</span></p>
<p class="MsoNormal"><span><font face="Times New Roman">12</font></span><span>月</span><span><font face="Times New Roman">26</font></span><span>日</span><span>，共享内存的学习，实现</span><span><font face="Times New Roman">PV</font></span><span>类。</span></p>
<p class="MsoNormal"><span><font face="Times New Roman">12</font></span><span>月</span><span><font face="Times New Roman">27</font></span><span>日</span><span>，利用</span><span><font face="Times New Roman">PV</font></span><span>类实现同时在线人数的控制，<strong>学习守护进程相关知识</strong>。</span></p>
<p class="MsoNormal"><span><font face="Times New Roman">12</font></span><span>月</span><span><font face="Times New Roman">28</font></span><span>日</span><span>，僵尸进程问题的学习。</span></p>
<p class="MsoNormal"><span><font face="Times New Roman">12</font></span><span>月</span><span><font face="Times New Roman">29</font></span><span>日</span><span><font face="Times New Roman">-30</font></span><span>日，<strong>信号及其通信学习</strong>。实现配置文件，实现文件锁功能。</span></p>
<p class="MsoNormal"><span><font face="Times New Roman">12</font></span><span>月</span><span><font face="Times New Roman">30</font></span><span>日</span><span>，<strong>实现利用进程间通信控制守护进程的运行</strong>。</span></p>
<p class="MsoNormal"><span><font face="Times New Roman">1</font></span><span>月</span><span><font face="Times New Roman">1</font></span><span>日</span><span>，完善</span><span><font face="Times New Roman">FTP</font></span><span>服务器及相关子类。<strong>增加超时断开连接功能</strong>。</span></p>
<p class="MsoNormal"><span><font face="Times New Roman">1</font></span><span>月</span><span><font face="Times New Roman">2</font></span><span>日</span><span>，配置</span><span><font face="Times New Roman">linux</font></span><span>服务，<strong>设置为开机自动运行程序</strong>。</span></p>
<p class="MsoNormal"><span><font face="Times New Roman">1</font></span><span>月</span><span><font face="Times New Roman">3</font></span><span>日</span><span><font face="Times New Roman">-7</font></span><span>日，期末考试，完善全部功能细节。</span></p>
<p class="MsoNormal"><span><font face="Times New Roman">1</font></span><span>月</span><span><font face="Times New Roman">8</font></span><span>日</span><span>，编写文档和总结。</span></p>
<p><strong><span>文件结构</span><span></span></strong></p>
<table border="1" cellPadding="0" cellSpacing="0" class="MsoTableGrid">
<tr>
<td width="151" vAlign="top">
<p class="MsoNormal"><span><font size="3" face="Times New Roman">config.txt </font></span></p>
</td>
<td width="417" vAlign="top">
<p class="MsoNormal"><font size="3"><span>配置文件，被</span><span><font face="Times New Roman">main.cpp</font></span><span>调用。</span></font></p>
</td>
</tr>
<tr>
<td width="151" vAlign="top">
<p class="MsoNormal"><span><font size="3" face="Times New Roman">FTPS.cpp</font></span></p>
</td>
<td width="417" vAlign="top">
<p class="MsoNormal"><font size="3"><span><font face="Times New Roman">FTPS</font></span><span>类，被</span><span><font face="Times New Roman">main.cpp</font></span><span>调用</span></font></p>
</td>
</tr>
<tr>
<td width="151" vAlign="top">
<p class="MsoNormal"><span><font size="3" face="Times New Roman">FTPS.h</font></span></p>
</td>
<td width="417" vAlign="top">
<p class="MsoNormal"><font size="3"><span><font face="Times New Roman">FTPS</font></span><span>类头文件，被</span><span><font face="Times New Roman">FTPS.h </font></span><span>调用。</span></font></p>
</td>
</tr>
<tr>
<td width="151" vAlign="top">
<p class="MsoNormal"><span><font size="3" face="Times New Roman">main.cpp</font></span></p>
</td>
<td width="417" vAlign="top">
<p class="MsoNormal"><font size="3"><span>主程序文件，参数：</span><span><font face="Times New Roman"> start </font></span><span>开始</span><span><font face="Times New Roman"> stop </font></span><span>停止。守护进程</span></font></p>
</td>
</tr>
<tr>
<td width="151" vAlign="top">
<p class="MsoNormal"><span><font size="3" face="Times New Roman">mk</font></span></p>
</td>
<td width="417" vAlign="top">
<p class="MsoNormal"><font size="3"><span>编译</span><span><font face="Times New Roman">shell</font></span><span>指令。</span></font></p>
</td>
</tr>
<tr>
<td width="151" vAlign="top">
<p class="MsoNormal"><span><font size="3" face="Times New Roman">PV.cpp</font></span></p>
</td>
<td width="417" vAlign="top">
<p class="MsoNormal"><font size="3"><span><font face="Times New Roman">PV</font></span><span>操作类，被</span><span><font face="Times New Roman">FTPS.cpp</font></span><span>调用。</span></font></p>
</td>
</tr>
<tr>
<td width="151" vAlign="top">
<p class="MsoNormal"><span><font size="3" face="Times New Roman">PV.h</font></span></p>
</td>
<td width="417" vAlign="top">
<p class="MsoNormal"><font size="3"><span><font face="Times New Roman">PV</font></span><span>操作类头文件，被</span><span><font face="Times New Roman">PV.cpp</font></span><span>调用。</span></font></p>
</td>
</tr>
<tr>
<td width="151" vAlign="top">
<p class="MsoNormal"><span><font size="3" face="Times New Roman">seeMessage.cpp</font></span></p>
</td>
<td width="417" vAlign="top">
<p class="MsoNormal"><font size="3"><span><font face="Times New Roman">FTP</font></span><span>监控程序，输入</span><span><font face="Times New Roman">FTP</font></span><span>安装路径，即可开始监控。</span></font></p>
</td>
</tr>
<tr>
<td width="151" vAlign="top">
<p class="MsoNormal"><span><font size="3" face="Times New Roman">SOCKET.cpp</font></span></p>
</td>
<td width="417" vAlign="top">
<p class="MsoNormal"><font size="3"><span>套接口类，被</span><span><font face="Times New Roman">FTP.cpp</font></span><span>调用。</span></font></p>
</td>
</tr>
<tr>
<td width="151" vAlign="top">
<p class="MsoNormal"><span><font size="3" face="Times New Roman">SOCKET.h</font></span></p>
</td>
<td width="417" vAlign="top">
<p class="MsoNormal"><font size="3"><span>套接口类头文件</span><span><font face="Times New Roman">,</font></span><span>被</span><span><font face="Times New Roman">SOCKET.cpp</font></span><span>调用。</span></font></p>
</td>
</tr>
</table>
<p><strong><span>本程序安装配置方法</span><span></span></strong></p>
<p class="MsoNormal"><span><span><font face="Times New Roman">1.<span><font size="3">   1<font face="Georgia">.<span> </span></font></font></span></font></span></span><span>将以上</span><span><font face="Times New Roman">10</font></span><span>个文件拷贝到要安装的目录下，假设为</span><span><font face="Times New Roman"> /</font></span><em><span>prefix</span></em><span><font face="Times New Roman">/</font></span><span>。</span></p>
<p><span><span>2.<span>     </span></span></span><span>使用任意文本编译器打开</span><span><font face="Times New Roman">config.txt</font></span><span>文件，设置</span><span>ftp_port</span><span>（</span><span>端口号</span><span>），<span>main_path</span>（<span>FTP</span>默认上传目录），<span>install_path<span>  </span>= /</span></span><em><span>prefix</span></em><span>/</span><span>，<span>online_number</span>（最大支持同时在线人数），<span>logfile_path</span>（日志存放地址）。</span></p>
<p><span><span></span></span><span><span>3.<span>     </span></span></span><span>配置完毕以后，在终端输入<span> sh /<em>prefix</em>/mk </span>编译文件，生成</span><span><font face="Times New Roman">”</font></span><span>main</span><span><font face="Times New Roman">”</font></span><span>程序执行文件。</span></p>
<p><span><span></span></span><span><span>4</span></span><span><span>.<span>     </span></span></span><span>运行程序：<span>./</span></span><em><span>prefix</span></em><span>/main start</span><span><span>5.<span>     </span></span></span><span>结束程序：<span>./</span></span><em><span>prefix</span></em><span>/main stop</span></p>


<p>Related posts:<ol><li><a href='http://www.9ri.net/blog/%e6%9e%9a%e4%b8%betypedef%e9%a2%84%e5%a4%84%e7%90%86/' rel='bookmark' title='Permanent Link: 枚举,typedef,预处理'>枚举,typedef,预处理</a></li>
<li><a href='http://www.9ri.net/blog/stath%e5%a4%b4%e6%96%87%e4%bb%b6%ef%bc%8c%e8%bd%bb%e6%9d%be%e8%8e%b7%e5%8f%96%e6%96%87%e4%bb%b6%e5%b1%9e%e6%80%a7%e3%80%82/' rel='bookmark' title='Permanent Link: stat.h头文件，轻松获取文件属性。'>stat.h头文件，轻松获取文件属性。</a></li>
<li><a href='http://www.9ri.net/blog/%e7%94%a8stl%e5%bf%ab%e9%80%9f%e7%bc%96%e5%86%99ini%e9%85%8d%e7%bd%ae%e6%96%87%e4%bb%b6%e8%af%86%e5%88%ab%e7%b1%bb/' rel='bookmark' title='Permanent Link: 用STL快速编写ini配置文件识别类'>用STL快速编写ini配置文件识别类</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.9ri.net/blog/ftp-server-%e5%88%b6%e4%bd%9c%e6%80%bb%e7%bb%93%e6%97%a7%e6%96%87/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
