分类: C/C++
2010-03-21 21:52:07
FileZilla是开源的FTP服务器,用C++写的,通过分析它的源代码,可以掌握C++网络编程以及高并发服务器的设计。
FileZilla
是上的项
目,主页是,
我们要研究的版本是:FileZilla Server 0_9_18,其实FileZilla还包括客户端软件。
下载后安装,安装时选择安装source,即安装了源代码。
安装完成后,可以直接打开工程自带的FileZilla server.sln,这个是vs 2003.net工程,里面有三个project,
FZS
Interface:这个是FTP服务器的设置以及监控界面
Service:这个是核心的FTP服务器部分
GFtp:打不开,不知是干
什么用的,老外也会如此马虎? :)
直接编译是会出错,主要是FileZilla需要依赖两个第三方包:zlib(压缩算法包)以及regexp(正则表达式的包)
先搞定zlib,下载http://www.winimage.com/zLibDll/zlib123.zip
解
开,生成目录zlib123,用.net 2003打开zlib123\projects\visualc6\zlib.dsw
打开
生成|配置管理器,设置活动的解决方案配置为:DLL
Release,编译生成项目zlib,成功后会在目录Win32_DLL_Release下生成zlib1.lib和zlib1.dll
然后,regexp用到了boost第三方包,这里面有很多公用的C++组件,下载地址:
解
开后,在cmd下,
第一步:需要编译bjm,这是编译boost的编译器,晕
cd
boost_1_33_1\tools\build\jam_src
build.bat
在当前的bin.ntx86目录下,生成了
bjam.exe文件。
第二步:编译boost
cd boost_1_33_1
将刚才生成的bjam.exe拷过来
set
VC7_ROOT="C:\Program Files\Microsoft Visual Studio.NET 2003\Vc7"
bjam
"-sTOOLS=vc7" install
这个步骤需要很久时间,其时我们只用了里面的regexp包,应该可以只编译这个包,但我没细研
究。
编译完成后即在C盘根目录下生成了boost目录,这个目录下面.net工程要用到。
在.net工程里,工具|选项|项目|VC++目录,添加
可执行文件:zlib123\projects\visualc6
\Win32_DLL_Release
包含文件:zlib123目录以及c:\Boost\include\boost-1_33_1
库
文件:zlib123\projects\visualc6\Win32_DLL_Release以及c:\Boost\lib
这时FZS Interface工程应该可以编译成功了,编译完成后会在Debug目录生成FileZilla Server Interface.exe。
生成Service工程时,需要调整一下工程设置:
语言设置:打开工程属性页,配置属性|常规,选择字符集为“使用 Unicode
字符集”,否则编译时会出错unicode必须使用;
链接设置:打开工程属性页,配置属性|链接器,将输入zlib.lib改成
zlib1.lib(因为zlib123工程生成的是zlib1.lib)
下面生成一下,应该可以了。在生成Service工程完成时已经自动安
装了"FileZilla Server FTP server"服务,也可以手工安装服务:
cd
FileZilla_Server\Debug
"FileZilla server.exe" install auto
可以试一下这个FTP服务器了,运行FileZilla_Server\interface\Debug\FileZilla Server Interface.exe,这是FTP服务器的配置监控程序,试着加几个user,设置home dir,再用FTP客户端连接一下试试,应该可以了。
下面开始分析这个服务器的实现。