FTP客户端说明书.docx_第1页
FTP客户端说明书.docx_第2页
FTP客户端说明书.docx_第3页
FTP客户端说明书.docx_第4页
FTP客户端说明书.docx_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

FTP客户端设计说明书目 录摘 要21. FTP协议与原理31.1 FTP简介31.2 FTP运行原理31.3 FTP工作原理42.系统分析52.1 应解决的问题52.2 功能分析52.3 Ftp客户端设计思想52.4开发工具63.技术规格74.FTP协议命令及说明84.1 CCommandSocket类84.2 CFileSocket类84.3 CReceiveSocket类94.4 CPortSocket类94.5 CFtpClient- DemoDlg类105.逻辑设计146. 测试156.1 系统可能出现的问题与不足156.2 测试的过程与结果分析157.总结16FTP客户端设计说明书摘 要本程序是一个小型FTP服务器系统,实现了FTP服务器所应该具备的大多数功能,包括用户的登录,文件的上传、下载、删除,选择数据传输模式、目录选择等,并给出相应的提示。通过该程序的开发,基本上实现了一个FTP服务器所应该具有的功能,能够解释一般的FTP命令,并且符合RFC959规范。本软件的设计,即从需求分析,软件设计到软件功能实现,都始终遵循软件工程的思想和方法。本文中采用了大量的图表说明,使文章明确清晰,便与阅读和理解。本程序采用VC+6.0作为开发工具,设计步骤采用自顶向下的方法。 关键词:上传;下载;VC+;FTP服务器1. FTP协议与原理1.1 FTP简介FTP是Internet上最早也是最广的应用,直到今天它仍是最重要和最基本的应用之一。用FTP将信息下载到本地是一件十分普遍的事。也随之出现了许多下载软件。尽管远程登录(Telnet)提供了访问远程文件的极好方法,但怎么也比不上使用自己计算机中的文件方便。如果用户想使用其它计算机上的文件,最理想的方法就是把它COPY到自己的计算机中,以便在本地计算机上操作。FTP正是完成这项工作的工具,你可以在任意一个经过文件传输协议(FTP)访问的公共有效的联机数据库或文档中找到你想要的任何东西全世界现在已有成千上万个FTP文件服务器对所有INTERNET用户开使用,用户可以通Internet相连到远程计算机,把自己需要的文件传输过来或是把自己的收集传输上去与他人共享。传统的数据库应用系统采用的是客户机/服务器(Client/Server)模式,有高度的交互性,高效的用户界面等优点。FTP 是TCP/IP 协议组中的协议之一,是英文File Transfer Protocol的缩写。该协议是Internet文件传送的基础,它由一系列规格说明文档组成,目标是提高文件的共享性,提供非直接使用远程计算机,使存储介质对用户透明和可靠高效地传送数据。简单的说,FTP就是完成两台计算机之间的拷贝,从远程计算机拷贝文件至自己的计算机上,称之为“下载(download)”文件。若将文件从自己计算机中拷贝至远程计算机上,则称之为“上载(upload)”文件。在TCP/IP协议中,FTP标准命令TCP端口号为21,Port方式数据端口为20。1.2 FTP运行原理 从根本上说,FTP协议就是在网络中各种不同的计算机之间按照TCP/IP协议来传输文件。FTP协议采用客户机/服务器(Client/Sever)模式,由FTP客户端程序和FTP服务器端程序组成。使用时,先启动FTP客户端程序与远程主机建立连接,然后向远程主机发出传输命令,远程主机在收到命令后就给予响应,并执行正确的命令。但是FTP有一个根本的限制,那就是,如果用户在某个主机上没有注册获得授权,即没有用户名和口令,就不能与该主机进行文件传输。但匿名FTP服务器除外,它能够使用户与远程主机建立连接并以匿名身份从远程主机上拷贝文件,而不必是该远程主机的注册用户。用户使用特殊的用户“Anonymous”或“guest”就可有限制地访问远程主机上公开的文件。现在许多系统要求用户将Emai1地址作为口令,以便更好地对访问者进行跟踪。出于安全的目的,大部分匿名FTP主机一般只允许远程用户下(download)文件和上传文件。1.3 FTP工作原理FTP是TCP/IP的一种具体应用,它工作在OSI模型的第七层,TCP模型的第四层上,即应用层,使用TCP传输而不是UDP,这样FTP客户在和服务器建立连接前就要经过一个被广为熟知的“三次握手”的过程,它带来的意义在于客户与服务器之间的连接是可靠的,而且是面向连接,为数据的传输提供了可靠的保证。采用FTP协议可使 Internet用户高效地从网上的FTP服务器下载大信息量的数据文件,将远程主机上的文件拷贝到自己的计算机上。以达到资源共享和传递信息的目的。由于FTP的使用使得Internet上出现大量为用户提供的下载服务器。Internet成为了一个巨型的软件仓库。FTP在文件传输中还支持断点续传功能,可以大幅度地减小CPU和网络带宽的开销。2.系统分析Ftp服务的设计与实现主要分为两部分来为客户实现Ftp服务:一是服务器端的配置(windows xp IIS 部件演示),二是客户端(由本人设计开发)这也是本次设计的重点;系统流程为客户实现并解析服务器配置,以及客户端软件的开发及应用,主要在多个用户间提供资源共享服务。2.1 应解决的问题设想好程序将要实现的大体功能后,我们就要分析该程序所需的条件,对该程序中将要遇到的问题做一下准备工作,以便于以后设计的顺利进行。根据我们想要在局域网内进行文件传输的要求,首先,要选择在局域网内通讯;其次,因为本程序要实现的是FTP服务器功能,所以我们要建立服务器但是为了测试服务器是否能够有效运行,又配置了一个客户端。2.2 功能分析在做程序之前,我们要先确定本程序的功能,只有确定了功能,才能确定程序中使用什么函数来实现。如果想在局域网内进行文件传输,首先要有服务器端和客户端,两者配合使用。先打开客户端和服务器,然后让客户登陆一下服务器,服务器端设制一下服务器所完成的功能,然后客户端在向服务器发送请求。2.3 Ftp客户端设计思想在本次FTP的设计中主要使用vc+编程,无需考虑基本的通信协议和底层的数据传输工作,编译提供的WinInet类是对WinInet API函数封装而来的,它为用户提供了更加方便的编程接口。而在该设计中,使用的类包括CCommandSocket类、CFileSocket类、CPortSocket类和CReceiveSocket类,其中,CCommandSocket用于创建一个Internet会话; CFileSocket完成文件发送上传操作; CReceiveSocket负责接收某一个目录下的所有文件和子目录;CPortSocket类负责根据数据来连接服务器。程序的功能:1.登陆到FTP服务器。2.检索FTP服务器上的目录和文件。3.根据FTP服务器给的权限,会相应地提供:文件的上传、下载、等功能。2.4开发工具在WINDOWS环境下,使用VC+开发工具实现一个FTP客户端软件。代码分析工具:VC+ 6.0 流程图分析工具:Microsoft Visio 2003 测试工具:FTP服务器(个人FTP服务器)。3.技术规格FTP协议将使用两条单独的TCP连接,一条专用于发送FTP命令,另一条则专用于传递数据。初始建立连接时,服务器在21号端口上接收来自客户端的命令连接。当需要传送数据时(文件列表、文件数据等),客户端向服务器发出Port命令,并进入监听状态,等待来自服务器的数据连接请求。使用时需输入用户名和密码,用户名和密码一致方可使用系统。登录界面如下图所示:实现技术:(1)创建Internet会话,建立于FTP服务器的连接。(2)检索登陆目录下的所有文件及其子目录(3)上传、下载文件(4)关闭与服务器的连接首先我们利用VC+ 6.0的AppWizard创建一个基于对话框的应用程序,命名为FtpClientDemo。为程序生成五个基于CAsyncSocket的新类,这里列出主要代码。4.FTP协议命令及说明4.1 CCommandSocket类CCommandSocket类的主要代码:void CCommandSocket:OnReceive(int nErrorCode)/这个函数使得服务器的应答消息显示在编辑框上 char buffer=new char4096; memset(buffer,0,4096); this-Receive(buffer,1024,0);/接收应答消息 MessageList+=buffer; m_ReturnMessage-SetWindowText(MessageList); delete buffer;4.2 CFileSocket类CFileSocket类的主要代码:void CFileSocket:OnReceive(int nErrorCode)/函数将收到的文件数据写到文件中 if(File= =NULL) File=new CFile(); File-Open(FileName,CFile:modeWrite|CFile:modeCreate); charbuffer=new char4096; memset(buffer,0,4096); this-Receive(buffer,4096,0); ReceiveString=buffer; File-Write(ReceiveString,ReceiveString.GetLength( ); delete buffer;4.3 CReceiveSocket类CReceiveSocket类的主要代码:void CReceiveSocket:OnReceive(int nErrorCode)/接收服务器传来的文件列表消息 CString ReceiveString,Temp; charbuffer=new char4096; memset(buffer,0,4096); this-Receive(buffer,4096,0); /接收消息 ReceiveString+=buffer; delete buffer;/将文件列表从收到的消息字符串中分离出来,并显示在列表框中 while(!ReceiveString.IsEmpty() int p=ReceiveString.Find(rn);if(p!=-1) Temp=ReceiveString.Left(p);ReceiveString=ReceiveString.Right(ReceiveString.GetLength()-p-2);DisplayMessage-AddString(Temp); 4.4 CPortSocket类CPortSocket类主要代码void CPortSocket:OnAccept(int nErrorCode)/根据不同的标志选择相应的数据连接类,以接受服务器端的数据连接请求 if(Flag= =LISTFILE)/若程序要求对目录进行列表,则采用CReceiveSocket类 DataSocket=new CReceiveSocket(FileList); this-Accept(DataSocket); else if(Flag= =DOWNLOAD)/若程序要求下载文件,则生成CFileSocket类的对象FileSocket=new CFileSocket(FileName);this-Accept(FileSocket); 4.5 CFtpClient- DemoDlg类主对话框类CFtpClient- DemoDlg的主要代码void CFtpClientDemoDlg:OnFileList()/响应“文件列表”按钮、列表目录 CString Temp; if(ControlSocket= =NULL)/连接到FTP服务器ControlSocket=new CCommandSocket(&m_ReturnMessage);ControlSocket-Create();m_Server.GetWindowText(Temp);ControlSocket-Connect(Temp,21);/FTP服务器在21号端口接收连接 m_User.GetWindowText(Temp); Temp=USER +Temp+rn; ControlSocket-Send(Temp,Temp.GetLength(),0);/发User命令,验证用户 m_Pass.GetWindowText(Temp); /m_Pass为“口令”编辑框的对应控制 Temp=PASS +Temp+rn; ControlSocket-Send(Temp,Temp.GetLength(),0);/发Pass命令,校验口令 LisentPort(LISTFILE);/数据连接的对象为目录列表 ControlSocket-Send(LIST rn,7 ,0);/发List命令,要求列表目录void CFtpClientDemoDlg:OnDownLoad( )/下载文件 CString String; LisentPort(DOWNLOAD);/获得要下戴文件的文件名 m_LocalFile.GetWindowText(String);/ m_LocalFile为“文件名”编辑框的对应控制 String=RETR +String+rn; ControlSocket-Send(String,String.GetLength( ),0);/发RETR命令,下载文件void CFtpClientDemoDlg:LisentPort(UINT Flag)/根据要求选择不同的数据连接对象 if(LisentSocket!=NULL)/清空LisentSocket LisentSocket-Close(); delete LisentSocket; LisentSocket=NULL; if(Flag= =LISTFILE)/如果为目录列表数据连接对象 LisentSocket=new CPortSocket(LISTFILE); LisentSocket-SetListBox(&m_FileList);/传列表框到CLisentSocket类中 else if(Flag= =DOWNLOAD)/如果为文件传输数据连接对象 CString String; m_LocalFile.GetWindowText(String); LisentSocket=new CPortSocket(DOWNLOAD); LisentSocket-SetFileName(String);/传文件名到CLisentSocket类中 LisentSocket-Create();/建立Socket并进行监听,等待FTP服务器进行数据连接 LisentSocket-Listen();/取得数据连接Socket的IP地址和监听端口,并把它们作为Port命令的参数 SOCKADDR_IN listing_address, control_address; int addr_size; addr_size = sizeof(listing_address); LisentSocket-GetSockName(SOCKADDR )&listing_address,&addr_size); /取IP地址 ControlSocket-GetSockName(SOCKADDR )&control_address,&addr_size); /取端口unsigned char port = (unsigned char )&(listing_address.sin_port); unsigned char host = (unsigned char )&(control_address.sin_addr); CString strBuffer; strBuffer.Format(PORT %i,%i,%i,%i,%i,%irn,(int)host0,(int)host1, (int)host2, (int)host3,(int)port0, (int)port1); ControlSocket-Send(strBuffer,strBuffer.GetLength(),0);/发送Port命令,进行数据连接以上代码在VC+ 6.0、Windows XP上运行通过。5.逻辑设计该软件可以采用分层结构,每一层实现一个相对独立的功能,并向上层提供一个简单、有好、功能强大的接口。这样便于系统的维护、扩充和优化。逻辑结构网络层,负责网络管理,通过编程工具的网络命令,实现数据的发送和接受。可以抽象成流的形式,实现网络的抽象,即把对网络的操作,抽象成本地操作。命令层,负责FTP命令的解释执行,并对返回码进行处理。接口层,把FTP命令封装成文件操作,为用户层提供一个方便、简单的接口。用户层,用户显示界面。6. 测试6.1 系统可能出现的问题与不足经过几次的软件测试发现系统存在着一些不足之处。具体为:1) 当客户端与服务器建立连接时,有时连接较慢。2) 当用户向服务器上传文件时可能会传输中断,服务器仍然存在一些不稳定的数据连接。6.2 测试的过程与结果分析在编写程序时有时会遇到运行错误,这是由于有的地方代码编写错误只有改写一下就可以了。首先因为创建的是服务器端,所以先登陆

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论