1、摘要摘 要互联网的一大特点是实现信息共享,文件传输是信息共享的十分重要的内容之一。随之出现了许多FTP服务器来共享一些信息资源,编写一个操作简单,方便的FTP客户端来下载这些资源受到了人们的极大欢迎。 本论文的主要工作集中在:学习了解TCP/IP协议和文件传输协议、了解和掌握FTP的工作原理及网络编程原理、熟悉Visual Studio 2005开发工具的使用利用C+语言设计和实现FTP客户端。FTP客户端分为连接模块和文件传输模块。连接模块实现主机与服务器的连接的功能;文件传输模块实现主机与服务器连接成功后上传和下载文件功能。本次设计使用流行的C+作为此次设计的开发语言,并采用C/S结构作为
2、FTP的网络结构,论文首先对MFC和C+语言做了简要说明,然后介绍了FTP相关的概念及其FTP的工作原理,最后全面的介绍了FTP客户端的设计、实现以及功能的测试。关键词:C+ 网络编程 文件传输协议 客户Abstract The predominant characteristic of network is information resources sharing. Document transmission is an important component element. Because of this, many File Transfer Protocol (FTP) serve
3、rs appeared, and won its way into favor.This thesis work focuses on: learning to understand TCP / IP protocol and file transfer protocol, understanding and knowledge of FTP works and network programming principle, familiar with Visual Studio 2005 development tools used by C+ language design and impl
4、ementation of FTP client. FTP client and file transfer into connector module. Connection module connected to the host and server functions; file transfer module, after a successful connection with the server host to upload and download files function.The design using the popular C + + as the design
5、of the development of language, and using C/S structure as FTP, network structure, the paper first, MFC and C+ language gives a brief description, and then introduced the FTP-related concepts and FTP, Works, the last comprehensive introduction to the FTP clients design, implementation, functional te
6、sting.Key words: C+ Network Programming File Transfer Protocol Client 目录i目 录第一章 绪论11.1 课题背景11.2 国内外研究现状11.3 本课题研究的研究方法及意义21.4 论文的组织结构2第二章 技术背景52.1 开发语言选择52.2 MFC简介52.3 套接字简介62.3.1 流式套接字72.3.2 数据报套接字72.3.3 原始套接字82.4 FTP简介82.4.1 FTP工作原理92.4.2 FTP工作模式112.4.3 FTP命令与FTP响应信息142.5 小结17第三章 FTP软件需求分析193.1 环境
7、需求193.2 需要完成目标193.3 功能需求193.4 小结20第四章 FTP软件设计与实现214.1 框架资源的设计214.1.1 编辑对话框资源214.1.2 添加新类和编辑各类的成员变量及函数214.2 代码的实现224.2.1 初始化函数代码224.2.2 连接服务器函数代码254.2.3 上传或下载文件函数代码264.2.4 断开连接函数代码274.3 小结29第五章 运行与测试315.1测试截图315.2 小结34第六章 结束语35致 谢37参考文献391第一章 绪论3第一章 绪论第一章 绪论从1946年,第一台计算机的诞生,到1969年美国国防部的国防高级研究计划局(DARP
8、A)建立了世界上第一个分组交换网(ARPARENT),再到现在计算机网络应用到各行各业,走进我们的生活,计算机网络技术的发展速度可谓一日千里。随着计算机技术的发展,特别是计算机网络的发展,人类对它依赖程度越来越高,大量的网络资源如何使更多的人能够很好的共享,这也是计算机网络发展至今的伟大意义。1.1 课题背景FTP是Internet上最早也是最广的应用,直到今天它仍是最重要和最基本的应用之一。用FTP将信息下载到本地是一件十分普遍的事。也随之出现了许多下载软件。尽管远程登录(Telnet)提供了访问远程文件的极好方法,但怎么也比不上使用自己计算机中的文件方便。如果用户想使用其它计算机上的文件,
9、最理想的方法就是把它COPY到自己的计算机中,以便在本地计算机上操作。FTP正是完成这项工作的工具,你可以在任意一个经过文件传输协议(FTP)访问的公共有效的联机数据库或文档中找到你想要的任何东西。全世界现在已有不少FTP文件服务器对所有INTERNET用户开放使用,用户可以通过与Internet相连到远程计算机,把自己需要的文件传输过来或是把自己的收集传输上去与他人共享。传统的数据库应用系统采用的是客户机/服务器(Client/Server)模式,有高度的交互性、高效的用户界面等优点。1.2 国内外研究现状1971年,第一个FTP的RFC(RFC 114)由A.K.Bhushan在1971年
10、提出,同时由MIT与Harvard实验实现;1972年,RFC 172 提供了主机间文件传输的一个用户级协议;1973年2月,在长期讨论(RFC 265,RFC 294,RFC 354,RFC 385,RFC 430)后,出现了一个官方文档RFC 454;1973年8月,出现了一个修订后的新官方文档 RFC 542,确立了FTP的功能、目标和基本模型。当时数据传输协议采用NCP;1980年,由于底层协议从NCP改变为TCP,RFC 765 定义了采用TCP的FTP;1985年,一个作用持续至今的官方文档RFC 959(STD 9)出台。用FTP传输文件,本来用户事先应在远方系统注册,但后来为了
11、便于大家获取资源,FTP在互联网上有一种特殊的也是非常广泛的应用是匿名FTP (anonymous FTP)。通过Internet,任何用户可以使用FTP和一个公用账号(通常账号名是anonymous)去获得一些公用资源。在Internet上目前有许许多多的这种公用计算机,我们把这种用来做匿名FTP服务的计算机称作FTP服务器(FTP Server),对每一个联入Internet的用户,只要知道这些FTP服务器的地址,就可以与它们连接并获取上面各种资源。由于FTP操作简单实用,开放性强,且能充分利用Internet来进行信息传递与交流,所以目前越来越多的FTP服务器连入Internet,这样越
12、来越多的资源就可以通过匿名FTP来获得。1.3 本课题研究的研究方法及意义进一步熟悉Microsoft Visual Studio 2005开发环境,掌握一定开发Windows应用程序技术。对提高自己的C+语言编程能力,熟悉FTP原理及其它的工作过程。制作一个简单友好界面,快速,稳定的应用软件。对信息的快速共享起着一定的作用。让用户能第一时间和别人共同分享信息资源。同时对软件的开发流程有一定的了解。用Microsoft Visual Studio 2005开发FTP客户端软件。根据现有的FTP软件进行设计与实现。综合以前所学的相关知识:包括计算机网络技术、TCP/IP详解、信息安全相关知识等;
13、查阅Windows应用程序开发资料,学习C+语言,FTP通信过程。1.4 论文的组织结构本论文共分六章,各章节的内容安排如下:第一章 绪论:对本论文研究的背景、现状、意义。第二章 技术背景:首先对套接字进行简单的阐述,接着介绍了微软基础类库(MFC:Microsoft Foundation Class)、.NET技术、C+语言、FTP的工作原理、工作模式,最后介绍了常用的FTP命令及响应码。第三章 FTP软件需求分析:环境需求和从用户角度的功能需求。第四章 FTP软件详细设计与实现:一开始先介绍此架构资源的设计,接下来代码的实现。第五章 运行与测试:以明了的图形和文字注释对运行结果和相关的测试
14、进行了罗列。第六章 结束语:先总结了此论文的研究结果及还存在的不足,最后是通过本次毕业设计的收获。17第二章 技术背景第二章 技术背景2.1 开发语言选择C+ 是一种现代的面向对象的程序开发语言。C+之所以是一种倍受欢迎的语言,原因之一就在于它可以通过类库来进行扩展。有一些类库时随编译器一起提供的,还有一些是由其他软件公司销售的,另有一些则是有用户自己开发的。类库是一个可以在应用程序中使用的相互关联的C+类的集合。C+ 能够如此成功,部分原因是它的目标不只是为了将C语言转变成面向对象程序设计语言(虽然这是最初的目的),而且还为了解决当今程序员,特别是那些在C语言中已经大量投资的程序员所面临的许
15、多问题。人们已经对面向对象语言有了这样传统的看法:程序员应当抛弃所知道的每件事情并且从一组新概念和新文法重新开始,他应当相信,最好丢掉所有来自过程语言的老行装。从长远角度看,这是对的。但从短期角度看,这些行装还是有价值的。最有价值的可能不是那些已存在的代码库(给出合适的工具,可以转变它),而是已存在的头脑库。作为一个职业C程序员,如果让他丢掉他知道的关于C的每一件事,以适应新的语言,那么,几个月内,他将毫无成果,直到他的头脑适应了这一新范例为止。如果他能调整已有的C知识,并在这个基础上扩展,那么他就可以继续保持高效率,带着已有的知识,进入面向对象程序设计的世界。因为每个人有他自己的程序设计模型
16、,所以这个转变是很混乱的。因此, C + +成功的原因是经济上的:转变到面向对象需要代价,而转变到C + +所花的代价较小。C + +的目的是提高效率。效率取决于很多东西,而语言是为了尽可能地帮助使用者,尽可能不用武断的规则或特殊的性能妨碍使用者。C + +成功是因为它立足于实际:尽可能地为程序员提供最大便利。2.2 MFC简介微软基础类库(MFC:Microsoft Foundation Class)是微软为Windows程序员提供的一个面向对象的Windows编程接口,它大大简化了Windows编程工作。使用MFC类库的好处是:首先,MFC提供了一个标准化的结构,这样开发人员不必从头设计创
17、建和管理一个标准Windows应用程序所需的程序,而是“站在巨人肩膀上”,从一个比较高的起点编程,故节省了大量的时间;其次,它提供了大量的代码,指导用户编程时实现某些技术和功能。MFC库充分利用了Microsoft开发人员多年开发Windows程序的经验,并可以将这些经验融入到你自己开发的应用程序中去。对用户来说,用MFC开发的最终应用程序具有标准的、熟悉的Windows界面,这样的应用程序易学易用;另外,新的应用程序还能立即支持所有标准Windows特性,而且是用普通的、明确定义的形式。事实上,也就是在Windows应用程序界面基础上定义了一种新的标准MFC标准。Microsoft提供了一个
18、基础类库MFC,其中包含用来开发C+和C+ Windows应用程序的一组类。基础类库的核心是以C+形式封装了大部分的Windows API。类库表示窗口、对话框、设备上下文、公共GDI对象如画笔、调色板、控制框和其他标准的Windows部件。这些类提供了一个面向Windows中结构的简单的C+成员函数的接口。MFC中的各种类结合起来构成了一个应用程序框架,它的目的就是让程序员在此基础上来建立Windows下的应用程序,这是一种相对SDK来说更为简单的方法。因为总体上,MFC框架定义了应用程序的轮廓,并提供了用户接口的标准实现方法,程序员所要做的就是通过预定义的接口把具体应用程序特有的东西填入这
19、个轮廓。Microsoft Visual C+提供了相应的工具来完成这个工作:AppWizard可以用来生成初步的框架文件(代码和资源等);资源编辑器用于帮助直观地设计用户接口;ClassWizard用来协助添加代码到框架文件;最后,编译,则通过类库实现了应用程序特定的逻辑。 2.3 套接字简介为了能够方便地开发各种网络应用程序,美国伯克利大学为UNIX操作系统开发了一种网络编程接口,它是一种使应用程序可以访问通信协议的系统调用,也就是我们经常说的套接字(Socket)。套接字屏蔽底层通信软件和具体操作系统的差异,使任何两台安装TCP/IP协议软件的计算机之间可以通信。随着UNIX操作系统与T
20、CP/IP协议的广泛应用,套接字在编写网络应用程序中得到普及。后来,套接字被引入Windows等操作系统,逐渐发展成当前最流行的网络编程接口。套接字存在于某个通信区域中。通信区域又称为地址族(Address Family),它是一个抽象的概念,用于将通过套接字通信的应用进程的共同特性综合起来。一般来说,相同的通信区域中的套接字可以交换数据,跨区域通信则需要执行某种转换后才可以。为了实现不同计算机的应用进程之间的通信,TCP/IP协议在全网范围内唯一地标识一个进程,这时需要使用网络层的IP地址与传输层的端口,它们共同构成一个套接字的主要结构。套接字可以支持不同的通信协议与网络应用类型。不同的通信
21、协议针对的是不同类型的网络。BSD Socket支持多种类型的协议族,包括TCP/IP、Xerox、Novell与AppleTalk等。最初版本的Windows Socket(即Winsock)只支持IPv4协议(即常说的IP协议),新版本的Winsock开始支持更多协议类型。目前,常见的套接字主要有3种:流式套接字、数据报套接字与原始套接字,它们分别针对不同类型的网络应用。2.3.1 流式套接字流式套接字(SOCK_STREAM)提供面向连接的、可靠的数据传输服务,实际上它是基于TCP/IP协议族中的TCP协议实现的。流式套接字提供有序、无差错与无重复的数据流服务。流式套接字的设计是针对面向
22、连接的网络应用,在数据传输之前需要预先建立连接,在数据传输过程中需要维持连接,在数据传输结束后需要释放连接。由于采用校验和、确认与超时等差错控制手段,因此流式套接字可以保证数据传输的正确性。2.3.2 数据报套接字数据报套接字(SOCK_DGRAM)提供无连接的、不可靠的数据传输服务,实际上它是基于TCP/IP协议族中的UDP协议实现的。数据报套接字提供无序、有差错与有重复的数据流服务。数据报套接字的设计是针对无连接的网络应用,在数据传输之前不需要预先建立连接。由于只采用很有限的差错控制手段,因此数据报套接字无法保证数据传输的正确性。2.3.3 原始套接字原始套接字(SOCK_RAW)提供对网
23、络层协议(例如IP、ICMP与IGMP等)的访问。原始套接字可以保存IP数据包中完整的头部。前两种套接字不保留IP数据包的头部,而只是存储或转发那些接收到的数据包。如果需要分析IP数据包的头部,可以使用原始套接字进行网络编程。2.4 FTP简介FTP 是 TCP/IP 协议组中的协议之一,是英文File Transfer Protocol的缩写。该协议是Internet文件传送的基础,它由一系列规格说明文档组成,目标是提高文件的共享性,提供非直接使用远程计算机,使存储介质对用户透明和可靠高效地传送数据。简单的说,FTP就是完成两台计算机之间的拷贝,从远程计算机拷贝文件到自己的计算机上,称之为“
24、下载(download)”文件。若将文件从自己计算机中拷贝至远程计算机上,则称之为“上载(upload)”文件。在TCP/IP协议中,FTP标准命令TCP端口号为21,Port方式数据端口为20。从根本上说,FTP协议就是在网络中各种不同的计算机之间按照TCP/IP协议来传输文件。FTP协议采用客户机/服务器 (Client/Sever)模式,由FTP客户端程序和FTP服务器端程序组成。使用时,先启动FTP客户端程序与远程主机建立连接,然后向远程主机发出传输命令,远程主机在收到命令后就给予响应,并执行正确的命令。但是FTP有一个根本的限制,那就是,如果用户在某个主机上没有注册获得授权,即没有用
25、户名和口令,就不能与该主机进行文件传输。但匿名FTP服务器除外,它能够使用户与远程主机建立连接并以匿名身份从远程主机上拷贝文件,而不必是该远程主机的注册用户。用户使用特殊的用户名“Anonymous”或“guest”就可有限制地访问远程主机上公开的文件。现在许多系统要求用户将Emai1地址作为口令,以便更好地对访问者进行跟踪。出于安全的目的,大部分匿名FTP主机一般只允许远程用户下载(download)文件,而不允许上载(upload)文件。也就是说,用户只能从匿名FTP主机拷贝其需要的文件而不能把文件拷贝到匿名FTP主机。另外,匿名FTP主机还采用了其他一些保护措施以保护自己的文件不至于被用
26、户修改和删除,并防止计算机病毒的侵入。匿名FTP一直是Internet上获取信息资源的最主要方式,在Internet成千上万的匿名FTP主机中存储着无以计数的文件,这些文件包含了各种各样的信息、数据和软件。人们只要知道特定信息资源的主机地址,就可以用匿名FTP登录。2.4.1 FTP工作原理FTP服务是一种有连接的文件传输服务,采用的传输层协议是TCP协议。FTP服务的基本过程是:建立连接、传输数据与释放连接。由于FTP服务的特点是数据量大、控制信息相对较少,因此在设计时采用分别对控制信息与数据进行处理的方式,这样用于通信的TCP连接也相应地分为两种类型:控制连接与数据连接。其中,控制连接用于
27、在通信双方之间传输FTP命令与响应信息,完成连接建立、身份认证与异常处理等控制操作;数据连接用于在通信双方之间传输文件或目录信息。图2.1 FTP服务的工作原理图图2.1给出了FTP服务的工作原理。FTP客户机向FTP服务器发送服务请求,FTP服务器接收与响应FTP客户机的请求,并向FTP客户机提供所需的文件传输服务。根据TCP协议的规定,FTP服务器使用熟知端口号来提供服务,FTP客户机使用临时端口号来发送请求。FTP协议为控制连接与数据连接规定不同的熟知端口号,为控制连接规定的熟知端口号是21,为数据连接规定的熟知端口号为20。FTP协议采用的是持续连接的通信方式,它所建立的控制连接的维持
28、时间通常较长。FTP协议规定了两种连接建立与释放的顺序。控制连接要在数据连接建立之前建立,在数据连接释放之后释放。只有建立数据连接之后才能传输数据,并在数据传输过程中要保持控制连接不中断。控制连接与数据连接的建立与释放有规定的发起者。控制连接与数据连接建立的发起者只能是FTP客户机;控制连接释放的发起者只能是FTP客户机,数据连接释放的发起者可以是FTP客户机或服务器。如果在数据连接保持的情况下控制连接中断,则可以由FTP服务器要求释放数据连接。图2.2 FTP服务的工作过程图图2.2给出了FTP服务的工作过程。在FTP服务的工作过程中,FTP客户机向服务器请求建立控制连接,FTP客户机与服务
29、器之间建立控制连接;FTP客户机请求登录到服务器,FTP服务器要求客户机提供用户名与密码;当FTP客户机成功登录到服务器后,FTP客户机通过控制连接向服务器发出命令,FTP服务器通过控制连接向客户机返回响应信息;当FTP客户机向服务器发出目录命令后,FTP服务器会通过控制连接返回响应信息,并通过新建立的数据连接返回目录信息。2.4.2 FTP工作模式FTP支持两种模式,一种方式叫做Standard(也就是 PORT方式,主动方式),一种是Passive(也就是PASV,被动方式)。Standard模式FTP的客户端发送PORT命令到FTP服务器。Passive模式FTP的客户端发送PASV命令
30、到FTP Server。1. 主动方式的FTP工作过程:Port模式FTP客户端首先和FTP服务器的TCP 21端口建立连接,通过这个通道发送命令,客户端需要接收数据的时候在这个通道上发送PORT命令。PORT命令包含了客户端用什么端口接收数据。在传送数据的时候,服务器端通过自己的TCP20端口连接至客户端的指定端口发送数据。FTP server必须和客户端建立一个新的连接用来传送数据。连接过程如下图2.3:图2.3 FTP主动模式连接过程图针对FTP服务器前面的防火墙来说,必须允许以下通讯才能支持主动方式FTP:1).任何端口到FTP服务器的21端口(客户端初始化的连接SC)。2).FTP服
31、务器的21端口到大于1023的端口(服务器响应客户端的控制端口SC)。3)FTP服务器的20端口到大于1023的端口(服务器端初始化数据连接到客户端的数据端口SC)。4).大于1023端口到FTP服务器的20端口(客户端发送ACK响应到服务器的数据端口SC)。在第1步中,客户端的命令端口与FTP服务器的命令端口建立连接,并发送命令“PORT 1027”。然后在第2步中,FTP服务器给客户端的命令端口返回一个ACK。在第3步中,FTP服务器发起一个从它自己的数据端口(20)到客户端先前指定的数据端口(1027)的连接,最后客户端在第4步中给服务器端回一个ACK。主动方式FTP的主要问题实际上在于
32、客户端。FTP的客户端并没有实际建立一个到服务器数据端口的连接,它只是简单的告诉服务器自己监听的端口号,服务器再回来连接客户端这个指定的端口。对于客户端的防火墙来说,这是从外部系统建立到内部客户端的连接,这是通常会被阻塞的。2. 被动方式的FTP是这样的:在被动方式FTP中,命令连接和数据连接都由客户端,这样就可以解决从服务器到客户端的数据端口的进入方向连接被防火墙过滤掉的问题。当开启一个FTP连接时,客户端打开两个任意的非特权本地端口(N1024和N+1)。第一个端口连接服务器的21端口,但与主动方式的FTP不同,客户端不会提交PORT命令并允许服务器来回连它的数据端口,而是提交PASV命令
33、。这样做的结果是服务器会开启一个任意的非特权端口(P1024),并发送PORT P命令给客户端。然后客户端发起从本地端口N+1到服务器的端口P的连接用来传送数据。图2.4 FTP被动模式连接过程图对于服务器端的防火墙来说,必须允许下面的通讯才能支持被动方式的FTP:1).从任何端口到服务器的21端口(客户端初始化的连接SC)。2).服务器的21端口到任何大于1023的端口(服务器响应到客户端的控制端口的连接SC)。3).从任何端口到服务器的大于1023端口(入;客户端初始化数据连接到服务器指定的任意端口SC)。4).服务器的大于1023端口到远程的大于1023的端口(出;服务器发送ACK响应和
34、数据到客户端的数据端口SC)。被动方式的FTP连接过程如上图2.4。在第1步中,客户端的命令端口与服务器的命令端口建立连接,并发送命令“PASV”。然后在第2步中,服务器返回命令PORT 2024,告诉客户端(服务器)用哪个端口侦听数据连接。在第3步中,客户端初始化一个从自己的数据端口到服务器端指定的数据端口的数据连接。最后服务器在第4步中给客户端的数据端口返回一个ACK响应。被动方式的FTP解决了客户端的许多问题,但同时给服务器端带来了更多的问题。最大的问题是需要允许从任意远程终端到服务器高位端口的连接。幸运的是,许多FTP守护程序,包括流行的WU-FTPD允许管理员指定FTP服务器使用的端
35、口范围。第二个问题是客户端有的支持被动模式,有的不支持被动模式,必须考虑如何能支持这些客户端,以及为他们提供解决办法。例如,Solaris提供的FTP命令行工具就不支持被动模式,需要第三方的FTP客户端,比如ncftp。随着WWW的广泛流行,许多人习惯用web浏览器作为FTP客户端。大多数浏览器只在访问ftp:/这样的URL时才支持被动模式。这到底是好还是坏取决于服务器和防火墙的配置。很多防火墙在设置的时候都是不允许接受外部发起的连接的,所以许多位于防火墙后或内网的FTP服务器不支持PASV模式,因为客户端无法穿过防火墙打开FTP服务器的高端端口;而许多内网的客户端不能用PORT模式登录FTP
36、服务器,因为从服务器的TCP20无法和内部网络的客户端建立一个新的连接,造成无法工作。下面是主动与被动FTP优缺点的简要总结:主动FTP对FTP服务器的管理有利,但对客户端的管理不利。因为FTP服务器企图与客户端的高位随机端口建立连接,而这个端口很有可能被客户端的防火墙阻塞掉。被动FTP对FTP客户端的管理有利,但对服务器端的管理不利。因为客户端要与服务器建立两个连接,其中一个连到一个高位随机端口,而这个端口很有可能被服务器端的防火墙阻塞掉。FTP服务器的管理员需要他们的服务器有最多的客户连接,那么必须得支持被动FTP。我们可以通过为FTP服务器指定一个有限的端口范围来减小服务器高位端口的暴露
37、。这样,不在这个范围的任何端口会被服务器的防火墙阻塞。虽然这没有消除所有针对服务器的危险,但它大大减少了危险。2.4.3 FTP命令与FTP响应信息FTP服务在应用层采用的是FTP协议。1971年,RFC114文档定义了FTP协议的最初版本。1985年,RFC959文档定义了FTP协议的新版本,它是目前FTP服务仍遵循的协议标准。简单文件传输协议(Trivial File Transfer Protocol,TFTP)也可以用于实现文件传输,但是它不提供任何安全性方面的保证。FTP协议详细规定了FTP服务的工作流程,以及命令与响应的具体格式。FTP客户机在进行文件传输之前,需要通过控制连接定义
38、文件类型、数据结构与传输模式。在FTP服务的执行过程中,FTP客户机与服务器之间需要传输控制信息,这些信息用于完成某个具体的FTP操作,它们可以分为两种类型:FTP命令与FTP响应。其中,FTP命令是FTP客户机向服务器发送的操作请求,FTP响应是FTP服务器根据操作情况向客户机返回的信息。图3-7给出了FTP命令与FTP响应的关系。FTP协议详细规定了每种协议命令的顺序:首先需要顺序发送USER与PASS命令,最后需要发送QUIT命令,其他命令的顺序没有特殊要求。FTP协议规定了使用的命令,每个命令都由34个字母组成,后面是该命令的参数。每个命令都以回车键换行结束。其中,命令名是由3或4个大
39、写字母组成的字符串,它是对该命令的英文描述的缩写,例如USER是用户名的缩写;参数是完成命令需要使用的附加信息,例如USER的参数为具体的用户名。FTP命令的标准格式为:命令名 。FTP命令中的命令名是必须要有的,参数是由命令来决定是否需要的。例如,USER命令必须有参数,LIST命令可以没有参数。其中,最基本的几个FTP命令是:USER、PASS、LIST、RETR、STOR、DELE与QUIT。常用命令有:格式:USER功能:登陆用户名,以便服务器进行身份验证。格式:PASS功能:用户密码,该命令必须跟在登陆用户名命令之后。格式:LIST功能:返回指定路径下的文件列表,省略时,返回当前路径
40、下的文件列表。格式:RETR功能:下载直指定的文件格式:STOR功能:上传一个指定的文件,并将其存储在指定的位置。格式:CWD功能:改变工作目录。格式:CDUP功能:返回上层目录。格式:MKD功能:创建目录。格式:RMD功能:删除目录。格式:DELE功能:删除指定路径下的文件。格式:MODE功能:指定传输模式,S表示流,B表示块,C表示压缩。格式:QUIT功能:关闭与服务器的连接,退出登录。FTP响应码FTP协议也规定了客户端发送FTP命令后服务器返回的FTP响应码,响应码用3位数字编码表示。第1个数字给出有关命令状态的一般性指示,第2个数字指示所发生的常规错误类型,第3个数字提供了更为详细的
41、信息。其实,只要知道这3位代码一起表示什么意思就可以了。下面列出了部分响应码及其意义。110:重新启动标记应答。在这种情况下文本是确定的,它必须是:MARK yyyy=mmmm其中yyyy是用户进程标记,mmmm是服务器标记。120:服务在nnn分钟内准备好。125:数据连接已打开,准备传送。150:文件状态良好,打开数据连接。200:命令成功。202:命令未实现。211:系统状态或系统帮助响应。212:目录状态。213:文件状态。214:帮助信息,信息仅对人类用户有用。215:名字系统类型。220:对新用户服务准备好。221:服务关闭控制连接,可以退出登录。225:数据连接打开,无传输正在进
42、行。226:关闭数据连接,请求的文件操作成功。227:进入被动模式。230:用户登录。250:请求的文件操作完成。257:创建“PATHNAME”。331:用户名正确,需要口令。332:登录时需要账户信息。350:请求的文件操作需要进一步命令。421:不能提供服务,关闭控制连接。425:不能打开数据连接。426:关闭连接,中止传输。450:请求的文件操作未执行。451:中止请求的操作:有本地错误。452:未执行请求的操作:系统存储空间不足。500:格式错误,命令不可识别。501:参数语法错误。502:命令未实现。503:命令顺序错误。504:此参数下的命令功能未实现。530:未登录。532:存
43、储文件需要账户信息。550:未执行请求的操作。551:请求操作中止:页类型未知。552:请求的文件操作中止,存储分配溢出。553:未执行请求的操作:文件名不合2.5 小结本章主要向读者阐述了FTP的工作原理及FTP的工作模式,使读者对FTP有一个简单的认识,介绍了一些常用的FTP命令和响应码,对后面的设计打下了一个基础。19第三章 FTP软件需求分析第三章 FTP软件需求分析3.1 环境需求操作系统:Windows 7旗舰版服务器:FTP服务器开发工具:Microsoft Visual Studio 20053.2 需要完成目标本系统的开发要求采用C/S结构,选用所熟悉的开发工具及开发环境进行
44、本系统的设计与开发。设计开发一个多功能FTP软件,本设计要求实现部分功能站点的连接及文件的上传与下载功能;能实现站点的添加与管理;能实现相关个人的设置保存(比如站点名及用户登录口令等)。本毕业设计要求提供能实现文件传输及站点连接等功能的软件,要求软件具有操作简便、界面友好等特性;形成一个真正实用的、功能完善的FTP软件。3.3 功能需求从用户的角度来分析本软件应具有以下功能:(1)用户要实现和服务器的连接,要有一个有好的界面,在该界面上要能够实现登陆信息的输入,以及连接到服务器上的文件信息显示等。(2)程序运行时候,在列表框中要能够显示服务器下详细文件信息。(3)FTP客户机是用来建立和服务器
45、连接,从而实现资源共享的。由于服务器的开放并不是对所有的用户都是完全共享的,往往是有密码保护的。对于已经知道服务器密码的用户,在登陆前,必须先输入登陆的信息,如用户名、密码、端口号、主机地址等。(4)连接到服务器后,在服务器列表框中能显示详细的服务器当前目录下的文件信息。(5)要想实现某个文件的上传后者下载,有很多方法,简单的就是双击鼠标选中该文件就可以了。因此程序能够提供对鼠标双击列表框的文件或者图标的响应机制。(6)用户切换不同服务器之间的连接时,只需要先断开连接,然后重新连接新的服务器即可,而不必每次先退出程序再打开运行。3.4 小结本章主要向读者阐述了设计FTP客户端环境需求和用户的角
46、度来分析本FTP客户端软件的基本功能。如基本的连接、断开服务器和文件的下载和上传等功能。29第四章 FTP软件设计与实现第四章 FTP软件设计与实现FTP客户机程序是基于对话框模式的编程思路,因此在程序规划中,要根据对话框程序运行的步骤,来设计程序。对于本程序来说,在程序运行的时候,首先对对话框资源初始化,包括登录默认信息和列表框设置信息。用户输入登录服务器有关的信息之后,调用Csocket类中的连接函数,打开控制通道,登录到服务器。然后从服务器读取文件列表信息,并返回到服务器列表框显示。当用户选中某个文件双击鼠标左键的时候调用上传或者下载函数,进行文件传输。当单击断开连接的时候,程序关闭连接通道,释放资源,断开和服务器的连接。由于FTP工具在实现的时候,主要是通过对话框资源的编辑,在每一个对话框按钮上添加代码来实现的,因此根据FTP的实际需求,将问题分为两部分来解决,即:资源框架的设计和实现代码的设计。4.1 框架资源的设计在Visual Studio 2005中,通过使用MFC中的“MFC应用程序”选项生成一个基于对话框的程序,名字为Ftp。4.1.1 编辑对话框资源由于在该程序中主要使用了对话框资源,因此建立项目文件后首先就要编辑对话框资源。在F