您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 销售管理 > 基于C++的FTP服务器程序设计
网络与信息安全实验-1-基于C++的FTP服务器程序设计摘要:本实验的目的是设计一个FTP服务器系统,实现FTP服务器的大多数功能,包括用户的登录,文件的上传、下载、删除、目录选择等,并给出相应的提示,能够解释一般的FTP命令,并且符合RFC959规范。本程序采用VC++6.0作为开发工具,设计采用自顶向下的方法。该系统有着良好的界面,简单易用。本实验的设计,即从需求分析,软件设计到软件功能实现,都始终遵循软件工程的思想和方法。本实验中采用了大量的图表说明,使文章明确清晰,便与阅读和理解。关键词:FTP服务器;上传、下载;自顶向下;1实验介绍由于网络的带宽及各种服务的限制,单纯从页面上下载显得又慢又不可靠,所以就有许多FTP[1]工具被开发出来。FTP是一个客户机/服务器系统。用户连接到在远程主机上的FTP服务器程序,发出命令,服务器程序执行用户所发出的命令,并将执行的结果返回到客户机。本次程序设计的是一个FTP服务器。通过TCP/IP网络应用程序基本的设计方法和实现技巧,实现FTP服务器所应该具备的大多数功能,并给出相应的提示。设计采用流行的C++语言作为此次设计的开发语言,并采用C/S网络通信结构作为FTP的网络体系结构;采用VisualC++6.0开发平台,Socket网络编程原理,成功与相应的FTP客户端连接。2实验目的理解并采用FTP协议制作一个简易的FTP服务器:1.具有用户授权功能(包括匿名模式);2.实现基本的命令(上传、下载、更改目录)操作;3.能够与目前已有FTP客户端连通。FTP客户机可以给服务器发出命令来下载文件,上载文件,创建或改变服务器上的目录。3实验原理FTP服务器的简单设计与实现建立在计算机网络实验环境TCP/IP网络体系结构之上,使用Socket编程接口编写。Socket通讯机制是一种较原始的通讯机制,通过Socket的数据表现出来的形式是原始字节流信息,通讯双方只要在此基础上按照双方约定方式进行数据的格式化和解析处理工作,这样才能完成具体的应用,即实现某种协议的过程[2]。图3-1是Socket的工作原理图。网络与信息安全实验-2-图3-1Socket原理图客户机程序发送请求给服务器程序,服务器进程对客户机的请求做出响应,并产生结果。客户机/服务器模式下,客户机为主动方,即请求方;而服务器为被动方,即接受请求方。FTP服务如下图所示。图3-2FTP服务示意图在数据处理领域中,客户机/服务器体系结构受到极关注,C/S已经成为网络计算机的主要方式。其中基于TCP/IP的网络通信主要模式也是客户机/服务器方式。C/S结构是软件系统体系结构,通过它可以充分利用两端硬件环境的优势,将任务合理分配到Client端和Server端来实现,降低了系统的通讯开销。其最重要的特征是:是一个平等的环境,客户机和服务器的地位可以互换。所以客户机/服务器体系结构应是应用程序之间相互作用的一种模型[3]。4实验步骤4.1图4-1所示系统流程图。网络与信息安全实验-3-图4-1系统流程图4.2主要的功能与实现用CSocket类编制的服务器端的程序,其过程如下,其过程主要是:(1)创建CSocket对象。(2)创建底层套接字Socket。(3)调用Listen,开始监听从客户端发来的访问请求。(4)如果收到请求,调用CAsyncSocket::Accept()函数进行接收外理[4]。(5)建立CSocketFile对象,并且使该对象与CSocket对象具备一定的联系。建立Carchive对象,以便实现卸装(接收)数据和存储(发送)数据的目的地址。注意:该Carchive对象应该与前面的CSocketFile对象建立联系。(6)使用Carchive对象在客户机和服务器Socket之间传递数据,从而实现服务开始打开监听端口接受连接请求执行相应操作结束YN连接成功?接受传输命令命令正确?YN网络与信息安全实验-4-器Socket和客户机Socket之间的通信。值得注意的是,一个给定的Carchive对象只能在单一的方向上传递数据:或者接收,或者发送。4.3程序界面程序界面主要包括服务器日志、在线用户、统计信息、安全管理、菜单栏、工具栏、状态栏。如图4-2所示。图4-2服务器用户界面4.3.1菜单栏功能模块菜单拦包括:服务器,查看。服务器菜单包括:开始,停止,用户账户向导,用户账户等功能。查看菜单包括:服务器日志,在线用户,配置,统计,安全等功能。各项功能实现如下:服务器功能:1.用户向导:当用户登录服务器时需要创建一个有效的账户,用户帐户向导将引导此用户通过必要的步骤,创造一个新的用户帐户。并将其添加到用户帐户对话框,创建用户名,如图4-3所示。网络与信息安全实验-5-图4-3用户帐户向导窗口通过这个窗口可以创建用户的用户名以及用以登陆FTP服务器的相应密码,该部分功能实现代码如下:CWizardPage1::CWizardPage1():CPropertyPageEx(CWizardPage1::IDD,0,IDS_HEADERTITLE1,NULL){m_strAccountName=_T(““);m_psp.dwFlags&=~PSP_HASHELP;}CWizardPage1::~CWizardPage1(){}voidCWizardPage1::DoDataExchange(CDataExchange*pDX){CPropertyPageEx::DoDataExchange(pDX);DDX_Text(pDX,IDC_ACCOUNTNAME,m_strAccountName);}BEGIN_MESSAGE_MAP(CWizardPage1,CPropertyPageEx)网络与信息安全实验-6-END_MESSAGE_MAP()2.用户帐户功能:这一功能主要是服务器端添加,修改和删除用户帐户,设置目录权限(使用添加按钮以添加一个新目录,其中选定的用户帐户已具有访问权限,每小组目录可以设定不同的权限,例如你可以给所有权限到“C:\下载”,但限制的权限为“C:\下载\申请”时,没有权限指定的目录,在这个目录中它会自动阻止用户要求上传的任何子目录)。目录属性[5],当您添加的编辑目录的用户帐户,目录属性对话框将显示物理目录(物理目录是“真正”的路径文件夹的名称),虚拟目录。设置服务端允许客户端的权限,例如允许客户端可以下载,上传,重命名哪些服务器端的文件内容。例如用户toldo将:“C:\temp”设为许可目录,客户端就可以随时下载,上传“C:\temp”盘里面的内容,如图4-4所示。图4-4用户帐户窗口这一功能实现,代码如下voidCUserAccountsDlg::OnDblclkDirlist(NMHDR*pNMHDR,LRESULT*pResult){OnEditDir();*pResult=0;}4.3.2查看功能模块服务器日志模块的功能:在此屏幕中,我们可以看到FTP服务器所记录的网络与信息安全实验-7-客户端与服务器端的连接信息以及传输信息,当客户端登陆服务器时服务器日志会显示是否与服务器连接成功,当客户端要上传文件或是下载文件成功时会记录服务器和FTP客户端的详细资料,从而有助于用户追踪服务器与客户端之间所有的通讯讯息,数目之间的方括号[]是线程ID,如图4-5所示。图4-5服务器日志窗口该部分功能实现代码如下:friendCLogFile&setlevel(CLogFile&os,intlevel){m_nCurrentLevel=level;returnos;}friendCLogFile&error_lvl(CLogFile&os){os.m_nCurrentLevel=1;returnos;}网络与信息安全实验-8-在线用户模块的功能:通过服务器来查看在线客户端的用户名,用户IP地址,用户登陆时间等信息,如图4-6所示。图4-6在线用户窗口该模块功能实现代码如下:classCOnlineUsersPage:publicCDialog{DECLARE_DYNCREATE(COnlineUsersPage)public:voidRemoveUser(DWORDnThreadID);voidAddUser(DWORDnThreadID,LPCTSTRlpszName,LPCTSTRlpszAddress);COnlineUsersPage();~COnlineUsersPage();enum{IDD=IDD_PROPPAGE_ONLINE};CListCtrlm_OnlineUsers;protected:网络与信息安全实验-9-virtualvoidDoDataExchange(CDataExchange*pDX);//DDX/DDVsupportprotected:afx_msgvoidOnSize(UINTnType,intcx,intcy);virtualBOOLOnInitDialog();};配置模块的功能:配置FTP服务器所有的设置。默认服务器端口为21,可以同时连接最多用户数,客户端与服务器端连接时间,欢迎信息,再见信息其他设置。FTP服务器在Windows下启动,启动最小化在系统盘,并在启动时自动激活服务器。用户还可以将用户各种信息都记录在服务器日志里,如图4-7所示。图4-7配置界面5结果分析在编写程序时有时会遇到运行错误,这是由于代码编写错误造成的。只要根据相应的错误提示对代码做出相应的修改即可。用客户端登录服务器,与服务器建立连接,实现文件的上传与下载等相应功能,并查看服务器端所做出的反应。客户端连接服务器时,需要输入用效的用户网络与信息安全实验-10-名、密码以及服务器IP,才可以与服务器建立连接。打开客户端,输入服务器地址,端口号,用户名以及密码即可成功连接服务器,显示登录成功。如图5-2图5-2客户端连接用户登录成功后,客户端[6]将会显示与服务器连接成功的信息,表示用户可以上传和下载文件了。连接成功后,双击选择相应的文件弹出对话框,点击确定,即可完成上传、下载等相应功能。此时服务端作出反应,显示在线用户及服务日志。如图5-3所示网络与信息安全实验-11-图5-3服务器端显示连接成功6结论本次程序设计的是一个FTP服务器。通过TCP/IP网络应用程序基本的设计方法和实现技巧,实现了FTP服务器所应该具备的大多数功能,包括用户的登录,文件的上传[7]、下载、选择数据传输模式、目录选择等,并给出相应的提示。通过该程序的开发,基本上实现了一个FTP服务器所应该具有的功能,能够解释一般的FTP命令,并且符合RFC959规范。设计采用流行的C++语言作为此次设计的开发语言,并采用C/S结构作为FTP的网络体系结构。采用VisualC++[8][9]6.0开发平台,C/S的网络通信模式及Socket网络编程原理。能成功与相应的FTP客户端连接,达到预期目的。目前FTP服务器还需增强的部分为:加快FTP服务器与相应客户端的连接速度;增强服务器与客户端数据连接时传输的稳定性,使使用者获得更加快捷方便的用户体验[10]。此次课程设计我搜索了很多的资料,学习到了很多新的内容;也让我懂得在以后的学习中要勤于思考,多多动手,更加认真耐心地解决学习中的问题。网络与信息安全实验-12-参考文献[1]J.Reynolds.RequestforComments:959:FileTransferProtocol,October1985:7-8.[2]AllmanM,OstermannS,CMetz.FTPExtensionsforIPv6andNATs[J].RFC,1998(9):24-28.[3]RobertEGilligam,SvanThowson,JimBownd,etal.BasicsocketinterfaceextansiowsforZPV6[J].RFC,1999:25-53.[4]任泰明.TCP/IP协议与网络编程[M].西安:西安电子科技大学出版社,2004.[5]Doug
本文标题:基于C++的FTP服务器程序设计
链接地址:https://www.777doc.com/doc-5325737 .html