基于FTP客户端设计与开发

基于FTP客户端设计与开发 [java毕业论文下载]

FTP客户端设计与实现

摘  要

互联网的一大特点是实现信息共享,文件传输是信息共享的十分重要的内容之一。随之出现了许多FTP服务器来共享一些信息资源,编写一个操作简单,方便的FTP客户端来下载这些资源受到了人们的极大欢迎。

FTP客户端软件是在了解FTP工作原理后,利用C#语言来设计和开发的。FTP客户端分为连接模块、文件管理模块、文件传输模块和辅助管理模块。连接模块实现主机与服务器的连接的功能;文件管理模块实现新建文件、删除文件等功能;文件传输模块实现主机与服务器连接成功后上传和下载文件功能。辅助管理模块实现一些相关功能如:读写配置INI文件。该FTP客户端软件达到了使用方便的目标,希望开发软件的经验能为使用.NET设计开发Windows应用程序FTP客户端软件的初学者提供一些帮助。

 

关键词.NET;C#;文件传输协议;客户端

 

 

The Design and Implementation of FTP Client

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) servers appeared, and won its way into favor. 

C# programming language is used to develop the FTP client software after comprehending the FTP working principle. And this FTP client software is made up of linking module、file management module、file transmission module and assisted management module. Linking module performs the functions of linking a host and a server; functions of operating on files are implemented in file management module; transmitting files is easy through applying file transmission module; assisted management module mainly performs the functions of reading and writing the INI files. This FTP client software is usable. And I hope the experience from this software development can do some help to the learners who'll devote their efforts to FTP client software development.

 

Key words: .NET; C#; FTP, Client

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

目  录

论文总页数:21页

1 引言 1

1.1 课题背景 1

1.2 国内外研究现状 1

1.3 本课题研究的意义 1

1.4 本课题的研究方法 2

2 技术背景 2

2.1 .NET技术简介 2

2.2 Visual Studio.NET简介 2

2.3 开发语言选择 2

2.4 FTP简介 3

2.5 FTP工作模式 4

3 FTP软件需求分析 6

3.1 需要完成目标 6

3.2 功能需求 7

3.3 环境需求 7

4 FTP软件详细设计与实现 7

4.1 软件总体分析与设计 7

4.2 各模块具体设计 7

4.2.1 连接管理设计 7

4.2.2 文件管理设计 9

4.2.3 文件传输设计 9

4.2.4 辅助功能设计 10

4.3 模块的程序实现 10

4.3.1 连接管理的程序实现 10

4.3.2 文件管理的程序实现 11

4.3.3 文件传输的程序实现 12

4.3.4 辅助功能的程序实现 13

5 软件测试 15

5.1 测试前分析 15

5.2 测试的过程与分析 15

5.3 测试小结 17

结    论 18

参考文献 19

致    谢 20

声    明 21

 

 

引言

1.1 课题背景

FTP是Internet上最早也是最广的应用,直到今天它仍是最重要和最基本的应用之一。用FTP将信息下载到本地是一件十分普遍的事。也随之出现了许多下载软件。尽管远程登录(Telnet)提供了访问远程文件的极好方法,但怎么也比不上使用自己计算机中的文件方便。如果用户想使用其它计算机上的文件,最理想的方法就是把它COPY到自己的计算机中,以便在本地计算机上操作。FTP正是完成这项工作的工具,你可以在任意一个经过文件传输协议(FTP)访问的公共有效的联机数据库或文档中找到你想要的任何东西。全世界现在已有1000多个(96年的数据)FTP文件服务器对所有INTERNET用户开使用,用户可以通过与Internet相连到远程计算机,把自己需要的文件传输过来或是把自己的收集传输上去与他人共享。传统的数据库应用系统采用的是客户机/服务器(Client/Server)模式,有高度的交互性,高效的用户界面等优点。

1.2 国内外研究现状

1971年,第一个FTP的RFC(RFC 114)由A.K.Bhushan在1971年提出,同时由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传输文件,本来用户事先应在远方系统注册,但后来为了便于大家获取资源,FTP在互联网上有一种特殊的也是非常广泛的应用是匿名FTP (anonymous FTP)。通过Internet,任何用户可以使用FTP和一个公用账号(通常账号名是anonymous)去获得一些公用资源。在Internet上目前有许许多多的这种公用计算机,我们把这种用来做匿名FTP服务的计算机称作FTP服务器(FTPSite),对每一个联入Internet的用户,只要知道这些FTP服务器的地址,就可以与它们连接并获取上面各种资源。由于FTP操作简单实用,开放性强,且能充分利用Internet来进行信息传递与交流,所以目前越来越多的FTP服务器连入Internet,这样越来越多的资源就可以通过匿名FTP来获得。

1.3 本课题研究的意义

进一步熟悉.net开发环境,掌握一定开发Windows应用程序技术。对提高自己的C#语言编程能力,熟悉ftp工作过程。制作一个界面友好,快速,稳定的下在软件。对信息的快速共享起着一定的作用。让用户能第一时间和别人共同分享信息资源。并希望能给FTP客户端编写初学者一些帮助。

1.4 本课题的研究方法

用Visual Studio.NET2003开发FTP客户端软件。根据现有的FTP软件进行设计与实现。综合以前所学的相关知识:包括计算机网络技术、TCP/IP详解、信息安全相关知识等;查阅Windows应用程序开发资料,学习C#语言,FTP通信过程。

技术背景

2.1 .NET技术简介

.NET技术是2000年微软公司推出的全新概念,它代表了一个集合、一个环境、一个编程的基础结构。其目的是将互联网本身作为构建新一代操作系统的基础,对互联网和操作系统的设计思想进行延伸。具体地说,.NET技术就是要在不同的网站之间建立起协定,促进网站之间的协同合作,实现信息的自动交流,从而帮助用户最大限度地获取信息、并对他们的数据进行简单、高效的管理。

2.2 Visual Studio.NET简介

Visual Studio .NET是Microsoft为实现其.NET技术而开发的一整套工具组件。它把开发功能强大、性能可靠的企业网络解决方案进行了简化。通过提供终端到终端的网络开发能力以及可伸缩、可复用的服务器端组件。Visual Studio .NET的主要作用在于:第一、提供加速开发过程的高效工具;第二、提供对各种各样的网络应用程序的快速设计能力,即程序员可以借助于Web Forms在开发基于窗体的桌面应用程序时所使用的技巧来创建跨平台、跨浏览器的网络应用程序;第三、利用XML和Web Services来简化分布式。

2.3 开发语言选择

C#是一种现代的面向对象的程序开发语言,它使得程序员能够在新的微软.NET平台上快速开发种类丰富的应用程序。.NET平台提供了大量的工具和服务,能够最大限度地发掘和使用计算及通信能力。

由于其一流的面向对象的设计,从构建组件形式的高层商业对象到构造系统级应用程序你都会发现C#将是最合适的。选择使用C#语言设计的组件能够用于Web服务,这样通过Internet可以被运行于任何操作系统上任何编程语言所调用。C#还能为C++程序员提供快捷的开发方式又没有丢掉C和C++的基本特征强大的控制能力,C#与C和C++有着很大程度上的相似性,熟悉C和C++的开发人员很快就能精通C#。

正如前文所述,C#是专门为.NET应用而开发出的语言,这从根本上保证了C#与.NET框架的完美结合。在.NET运行库的支持下,.NET框架的各种优点在C#中表现得淋漓尽致。让我们来看看C#的一些突出的特点,相信了解了这些特点以及本项目后你将会深深体会到“#”──“SHARP”的真正含义:简洁的语法;精心的面向对象设;与Web的紧密结合;完整的安全性与错误处理;版本处理技术;灵活性与兼容性。

2.4 FTP简介

FTP 是 TCP/IP 协议组中的协议之一,是英文File Transfer Protocol的缩写。该协议是Internet文件传送的基础,它由一系列规格说明文档组成,目标是提高文件的共享性,提供非直接使用远程计算机,使存储介质对用户透明和可靠高效地传送数据。简单的说,FTP就是完成两台计算机之间的拷贝,从远程计算机拷贝文件至自己的计算机上,称之为“下载(download)”文件。若将文件从自己计算机中拷贝至远程计算机上,则称之为“上载(upload)”文件。在TCP/IP协议中,FTP标准命令TCP端口号为21,Port方式数据端口为20。

从根本上说,FTP协议就是在网络中各种不同的计算机之间按照TCP/IP协议来传输文件。FTP协议采用客户机/服务器 (Client/Sever)模式,由FTP客户端程序和FTP服务器端程序组成。使用时,先启动FTP客户端程序与远程主机建立连接,然后向远程主机发出传输命令,远程主机在收到命令后就给予响应,并执行正确的命令。但是FTP有一个根本的限制,那就是,如果用户在某个主机上没有注册获得授权,即没有用户名和口令,就不能与该主机进行文件传输。但匿名FTP服务器除外,它能够使用户与远程主机建立连接并以匿名身份从远程主机上拷贝文件,而不必是该远程主机的注册用户。用户使用特殊的用户名“Anonymous”或“guest”就可有限制地访问远程主机上公开的文件。现在许多系统要求用户将Emai1地址作为口令,以便更好地对访问者进行跟踪。出于安全的目的,大部分匿名FTP主机一般只允许远程用户下载(download)文件,而不允许上载(upload)文件。也就是说,用户只能从匿名FTP主机拷贝其需要的文件而不能把文件拷贝到匿名FTP主机。另外,匿名FTP主机还采用了其他一些保护措施以保护自己的文件不至于被用户修改和删除,并防止计算机病毒的侵入。匿名FTP一直是Internet上获取信息资源的最主要方式,在Internet成千上万的匿名FTP主机中存储着无以计数的文件,这些文件包含了各种各样的信息、数据和软件。人们只要知道特定信息资源的主机地址,就可以用匿名FTP登录。

2.5 FTP工作模式

FTP支持两种模式,一种方式叫做Standard(也就是 PORT方式,主动方式),一种是Passive(也就是PASV,被动方式)。Standard模式FTP的客户端发送PORT命令到FTP服务器。Passive模式FTP的客户端发送PASV命令到FTP Server。

1.主动方式的FTP工作过程:Port模式FTP客户端首先和FTP服务器的TCP 21端口建立连接,通过这个通道发送命令,客户端需要接收数据的时候在这个通道上发送PORT命令。PORT命令包含了客户端用什么端口接收数据。在传送数据的时候,服务器端通过自己的TCP20端口连接至客户端的指定端口发送数据。FTP server必须和客户端建立一个新的连接用来传送数据。

针对FTP服务器前面的防火墙来说,必须允许以下通讯才能支持主动方式FTP:

1).任何端口到FTP服务器的21端口(客户端初始化的连接SßC)。

2).FTP服务器的21端口到大于1023的端口(服务器响应客户端的控制端口SàC)。

3).FTP服务器的20端口到大于1023的端口(服务器端初始化数据连接到客户端的数据端口SàC)。

4).大于1023端口到FTP服务器的20端口(客户端发送ACK响应到服务器的数据端口SßC)。

连接过程如下图1:

图1 FTP主动模式连接过程图

 
 

 

在第1步中,客户端的命令端口与FTP服务器的命令端口建立连接,并发送命令“PORT 1027”。然后在第2步中,FTP服务器给客户端的命令端口返回一个"ACK"。在第3步中,FTP服务器发起一个从它自己的数据端口(20)到客户端先前指定的数据端口(1027)的连接,最后客户端在第4步中给服务器端回一个"ACK"。

主动方式FTP的主要问题实际上在于客户端。FTP的客户端并没有实际建立一个到服务器数据端口的连接,它只是简单的告诉服务器自己监听的端口号,服务器再回来连接客户端这个指定的端口。对于客户端的防火墙来说,这是从外部系统建立到内部客户端的连接,这是通常会被阻塞的。

2.被动方式的FTP是这样的:在被动方式FTP中,命令连接和数据连接都由客户端,这样就可以解决从服务器到客户端的数据端口的进入方向连接被防火墙过滤掉的问题。当开启一个FTP连接时,客户端打开两个任意的非特权本地端口(N>1024和N+1)。第一个端口连接服务器的21端口,但与主动方式的FTP不同,客户端不会提交PORT命令并允许服务器来回连它的数据端口,而是提交PASV命令。这样做的结果是服务器会开启一个任意的非特权端口(P>1024),并发送PORT P命令给客户端。然后客户端发起从本地端口N+1到服务器的端口P的连接用来传送数据。

对于服务器端的防火墙来说,必须允许下面的通讯才能支持被动方式的FTP:

1).从任何端口到服务器的21端口(客户端初始化的连接SßC)。

2).服务器的21端口到任何大于1023的端口(服务器响应到客户端的控制端口的连接SàC)。

3).从任何端口到服务器的大于1023端口(入;客户端初始化数据连接到服务器指定的任意端口SßC)。

4).服务器的大于1023端口到远程的大于1023的端口(出;服务器发送ACK响应和数据到客户端的数据端口SàC)。

被动方式的FTP连接过程如下图2:

 

 
 

图2 FTP主动模式连接过程图

 

在第1步中,客户端的命令端口与服务器的命令端口建立连接,并发送命令“PASV”。然后在第2步中,服务器返回命令"PORT 2024",告诉客户端(服务器)用哪个端口侦听数据连接。在第3步中,客户端初始化一个从自己的数据端口到服务器端指定的数据端口的数据连接。最后服务器在第4步中给客户端的数据端口返回一个"ACK"响应。

被动方式的FTP解决了客户端的许多问题,但同时给服务器端带来了更多的问题。最大的问题是需要允许从任意远程终端到服务器高位端口的连接。幸运的是,许多FTP守护程序,包括流行的WU-FTPD允许管理员指定FTP服务器使用的端口范围。

第二个问题是客户端有的支持被动模式,有的不支持被动模式,必须考虑如何能支持这些客户端,以及为他们提供解决办法。例如,Solaris提供的FTP命令行工具就不支持被动模式,需要第三方的FTP客户端,比如ncftp。

随着WWW的广泛流行,许多人习惯用web浏览器作为FTP客户端。大多数浏览器只在访问ftp://这样的URL时才支持被动模式。这到底是好还是坏取决于服务器和防火墙的配置。

很多防火墙在设置的时候都是不允许接受外部发起的连接的,所以许多位于防火墙后或内网的FTP服务器不支持PASV模式,因为客户端无法穿过防火墙打开FTP服务器的高端端口;而许多内网的客户端不能用PORT模式登录FTP服务器,因为从服务器的TCP20无法和内部网络的客户端建立一个新的连接,造成无法工作。

下面是主动与被动FTP优缺点的简要总结:

主动FTP对FTP服务器的管理有利,但对客户端的管理不利。因为FTP服务器企图与客户端的高位随机端口建立连接,而这个端口很有可能被客户端的防火墙阻塞掉。被动FTP对FTP客户端的管理有利,但对服务器端的管理不利。因为客户端要与服务器建立两个连接,其中一个连到一个高位随机端口,而这个端口很有可能被服务器端的防火墙阻塞掉。

FTP服务器的管理员需要他们的服务器有最多的客户连接,那么必须得支持被动FTP。我们可以通过为FTP服务器指定一个有限的端口范围来减小服务器高位端口的暴露。这样,不在这个范围的任何端口会被服务器的防火墙阻塞。虽然这没有消除所有针对服务器的危险,但它大大减少了危险。

FTP软件需求分析

3.1 需要完成目标

本系统的开发要求采用C/S结构,选用所熟悉的开发工具及开发环境进行本系统的设计与开发。

设计开发一个多功能FTP软件,本设计要求实现部分功能——站点的连接、文件的上传与下载、文件的重命名、及站点连接功能;能实现站点的添加与管理;能实现相关个人的设置保存(比如站点名及用户登录口令等)。

本毕业设计要求提供能实现文件传输及站点连接等功能的软件,要求软件具有操作简便、界面友好等特性;形成一个真正实用的、功能完善的FTP软件。

3.2 功能需求

从用户的角度来分析本软件应具有以下功能:主机的连接包括直接连接和连接,直接连接主要是针对偶尔一次登录的主机,连接是针对常用的主机需要记录多个登录信息;对常用的主机地址及基本配置信息需要进行保存;文件能上传和下载,判断文件名是否重复进行询问是否覆盖,在断电的情况下能对文件进行断点续传,传输时进度显示(获取文件大小和传输速率估计完成时间);通过该软件能新建文件夹,文件名的修改,文件的删除;能搜索文件名为指定的文件;界面需要友好,简洁。

  • 环境需求

操作系统:Windows XP(or Windows 2000Advance Server)

网络服务器:FTP

开发平台:Visual Studio .NET 2003

  • FTP软件详细设计与实现
    • 软件总体分析与设计

根据需求分析,按照系统开发的基本观点对功能进行分解,从功能上可对模块作如下划分:

1.连接管理模块:主要完成主机与服务器之间的连接与关闭操作。

2.文件管理模块:主要完成文件的显示、新建文件、删除文件等。

3.文件传输模块:主要完成主机与服务器连接成功以后文件的上传与下载。

4.辅助功能模块:主要是保存一些登录信息和一些简单的配置信息。

  • 各模块具体设计
    • 连接管理设计

该Ftp客户端工具用一个Winsocket连接上Ftp服务器,然后向其发送命令。在这个过程中,我们依靠发送——响应的机制。即发送Ftp命令——接收返回的响应信息——分析该信息——执行相关操作——发送下一条命令。在一般意义上,有一个socket用来连接Ftp服务器的相关端口(如默认的21),它负责Ftp命令的发送和接收返回的响应信息。一些操作如“进入目录”、“删除文件”,依靠这个socket发送一条命令就可完成了。

1.客户端与服务器连接

FTP是建立在TCP之上的连接,端口号使用21。若客户端与服务器之间成功连接,服务器将返回字符串,如:220 GMS (Version 5.0)。

前三个字符220表示客户端与服务器成功连接,后面的字符会因服务器的不同而不同,但我们只关心前三个字符。

2.用户名和密码认证

客户端发送用户名给服务器,如:USER he,如果服务器找到用户名he,将返回字符串,如:331 User name okay, need password。

接着客户端应发送密码给服务器,如:PASS 123,密码正确,返回如:230 User logged in, proceed,如果用户名或密码认证没有通过,返回如:530 Not logged in。

用户名也可以使用匿名,如:USER anonymous,返回如:331 Anonymous access allowed, send identity (e-mail name) as password。

3.应答码及其含义

110:重新启动标记应答。在这种情况下文本是确定的,它必须是:MARK yyyy=mmmm其中yyyy是用户进程标记,mmmm是服务器标记。

120:服务在nnn分钟内准备好。

125:数据连接已打开,准备传送。

150:文件状态良好,打开数据连接。

200:命令成功。

202:命令未实现。

211:系统状态或系统帮助响应。

212:目录状态。

213:文件状态。

214:帮助信息,信息仅对人类用户有用。

215:名字系统类型。

220:对新用户服务准备好。

221:服务关闭控制连接,可以退出登录。

225:数据连接打开,无传输正在进行。

226:关闭数据连接,请求的文件操作成功。

227:进入被动模式。

230:用户登录。

250:请求的文件操作完成。

257:创建“PATHNAME”。

331:用户名正确,需要口令。

332:登录时需要账户信息。

350:请求的文件操作需要进一步命令。

421:不能提供服务,关闭控制连接。

425:不能打开数据连接。

426:关闭连接,中止传输。

450:请求的文件操作未执行。

451:中止请求的操作:有本地错误。

452:未执行请求的操作:系统存储空间不足。

500:格式错误,命令不可识别。

501:参数语法错误。

502:命令未实现。

503:命令顺序错误。

504:此参数下的命令功能未实现。

530:未登录。

532:存储文件需要账户信息。

550:未执行请求的操作。

551:请求操作中止:页类型未知。

552:请求的文件操作中止,存储分配溢出。

553:未执行请求的操作:文件名不合法。

  • 文件管理设计

文件管理具有文件的主要是新建文件夹、删除文件,使用DirectoryInfo类的Delete()方法和CreateDirectory()方法来实现。文件属性的设置包括:是否只读、是否隐藏、是否归档,用File类和Directory类来完成对文件和文件夹的属性设置。

  • 文件传输设

FTP协议用两个连接来达到客户机与服务器之间交换数据的目的如图3。先建立第一个连接——控制连接,它用于传送命令和响应。在建立第二个连接——数据连接,用于数据传输。FTP提供了两种方式来建立数据连接,一种用PORT命令,一种用PASV命令。我们使用后者。客户端发送PASV命令给服务器,服务器返回IP地址和端口号,用来提供给客户端进行数据连接。如:227 Entering Passive Mode (10,175,125,49,9,17)括号里6个数字中前4个数字表示IP地址10.175.125.49,后2个数字表示端口号,这2个数字按如下公式计算端口号:9*256+17=2321这样,客户端就可用IP地址10.175.125.49和端口号2321连接服务器,建立数据连接。

 

 
 

图3 文件传输中的处理过程

 

  • 辅助功能设计

根据需求功能需要完成文件的上传及下载必须要完成一些相关的辅助功能:

1.获取本地主机的系统驱动器信息功能,需要在项目引用中添加COM标签中的Microsoft Scripting Runtime组件,来获取系统驱动器信息。

2.目录选择功能:在目录输入框中可以根据目录来显示所选定的文件夹下所有文件及文件夹信息,信息包括文件路径、文件创建日期、文件大小,利用GetFileSystemEntries()方法来完成。

3.信息保存功能:信息的保存利用读写INI文件来实现,INI文件读写操作由调用系统API函数来完成。具体调用WritePrivateProfileString()方法实现写入操作,用GetPrivateProfileString()方法实现读操作。

  • 模块的程序实现
    • 连接管理的程序实现

在用户打开软件后进入主窗体(MFFTP.cs),在连接服务器输入框中输入IP地址、用户名及密码后。先发送IP地址和端口号到服务器,然后对其应答分析,如果应答码为220表示对新用户服务准备好,继续发送用户名返回应答码331表示用户名正确需要口令。最后发送密码直到返回应答码230表示用户登录成功。

基于FTP客户端设计与开发 [点击下载]

评论