




已阅读5页,还剩41页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
扬 州 大 学 毕 业 设 计 FTP 客户端的实现 学 号: 111403133 姓 名: 王金衔 专 业: 通信工程 指导老师: 王斌 二零一五年五月 扬州大学本科毕业设计(论文) 第 I 页 摘 要 FTP(File Transfer Protocol) 协议是在 Internet 上很早以前就出现的即经 典又使用广泛的协议之一。FTP 协议规定了 Internet 上文件如何传送,它使得我们 能够在 Internet 上互相传送文件。利用遵循 FTP 协议的客户端,客户就能连接到互 联网上的 FTP 服务器,然后进行上传和下载文件的操作。本次毕业设计的目的就是 实现一个简易的 FTP 客户端。首先介绍了 FTP 协议的基本工作原理和 FTP 的数据传 输原理,然后研究如何通过 Windows Socket 编程接口,使用 VC+6.0 编程工具设计 和实现 FTP 客户端。完成了对 FTP 客户端的开发,实现了连接 FTP 服务器以及文件 传输的功能。 关键词:因特网; 文件传输协议; 客户端 扬州大学本科毕业设计(论文) 第 II 页 Abstract FTP is a protocol that is widely used to transfer files over Internet. It stipulates how files are exchanged over Internet such that we can send files over Internet. Through clients of FTP protocol, files can be uploaded to or downloaded from FTP server. This design is aimed to design an easy-to-use FTP client. First we describe the basic working principle of FTP protocol and FTP data transmission. Then study how to use Windoews Socket programming interface and VC+ +6.0 platform to design and implement a basic FTP client. The implemented FTP client can connent to a FTP server and exchange files with it. Keywords: Internet; FTP; Client 扬州大学本科毕业设计(论文) 第 III 页 目 录 摘 要.II ABSTRACT.III 目 录IV 第 1 章 绪 论1 1.1 课题背景和意义1 1.2 国内外研究现状1 1.3 本课题的主要内容2 1.4 本课题的研究方法2 1.5 论文结构2 第 2 章 课题相关内容简介3 2.1 FTP 简介.3 2.1.1 FTP 工作模式 .4 2.1.2 FTP 传输模式 .8 2.2 内容分发网络简介8 2.3 开发环境简介9 第 3 章 FTP 客户端的分析与程序实现10 3.1 软件总体分析与设计10 3.1.1 软件总体分析10 3.2 各模块具体设计10 3.2.1 连接功能设计10 3.2.2 客户端界面设计12 3.2.3 客户端连接流程图14 3.2.4 上传子模块流程图15 3.2.5 下载子模块流程图16 3.2.6 CAsyncSocket 类与 CSocket 类 .17 3.3模块的程序实现17 3.3.1连接管理的程序实现 17 3.3.2获取文件列表信息函数 19 3.3.3文件上传函数实现 20 3.3.4文件下载函数实现 22 3.3.5安全退出模块实现 24 结 论26 致 谢27 扬州大学本科毕业设计(论文) 第 IV 页 参考文献28 附 录 1 主要程序29 扬州大学本科毕业设计(论文) 第 1 页 第 1 章 绪 论 1.1 课题背景和意义 Internet 上很早以前就出现了一些经典又广泛的应用,FTP 就是其中之一,从 它被定型到今天,依然是很重要很基本的应用之一。使用 FTP 下载文件到本地是一 件很平常的事,也催生了许多下载软件。尽管远程登录(Telnet)提供了访问远程 文件的很好的方法,但也无法比使用自己本地磁盘中的文件方便。若是客户想浏览 非本地计算机上的文件,最好的办法就是把文件下载至自己的本地磁盘里。FTP 正 是完成这项工作的工具,它可以使你在任意一个通过 FTP 协议访问的公共、有效的 服务器上寻找到任何你想要的东西。全球于 96 年时已经有多达 1000 个 FTP 服务器, 它们对所有处于 Internet 上的客户进行开放,客户就可以把自己需要的文件下载下 来或是把自己的文件上传上去与他人共享。现在的数据库应用系统基本都是采用传 统的客户机/服务器(Client/Server)模式,这是高度互动的,同时具有简介、高效的 用户界面等优点。 1.2 国内外研究现状 FTP 的第一个 RFC(Request For Comments,是一系列以编号排定的文件)由 A.K.Bhushan 提出于 1971 年,同时,由哈佛大学(Harvard University)和麻省理工 (MIT)的实验实现;两台主机之间的文件传送的一个用户级协议由 1972 年出台的 RFC 172 提供;经过长期的探讨论证 RFC 265、RFC 294、RFC 354、RFC 385 和 RFC 430 之后,官方在 1973 年 2 月发布了一个文档:RFC 454;官方在半年后的 1973 年 的 8 月,发布了修订后的新文档:RFC 542,这次修订明确了 FTP 的功能、目的与基 本的模型。再次修订的文档 RFC 765 在 1980 年出台,其确立了运用底层协议 TCP 的 FTP,而当时得数据传送协议运用的是网络控制协议(NCP) ,所以这一次修订更 改了 FTP 的底层协议;在 1985 年,FTP 官方文档的最终修订版文档 RFC 959(STD 9) 出台,这个文档一直使用到今天。使用 FTP 来传输文件,用户事先应该在服务器上 注册账号,但这种方法限制了大家共享资源的方便程度,后来为了大家能更方便的 获取共享资源,FTP 服务在网络上很广却又很特别的一种方式是匿名登陆 FTP。只要 客户上网,就可以使用 FTP 和匿名帐户(通常是匿名帐户名称是 anonymous,没有 密码)从远程主机上得到一些常见的共享资源。现如今在 Internet 上的这种提供 FTP 服务的主机已经数不胜数,然后大家就约定把这种用来做匿名 FTP 服务的主机 扬州大学本科毕业设计(论文) 第 2 页 叫作 FTP 服务器(FTP_Server) ,对于每个互联网客户,他们只需要知道任何一个 FTP 服务器的 IP 地址,就可以和 FTP 服务器进行连接,然后获取到服务器上面繁杂 的共享资源。因为 FTP 服务的操作简便,具有很强的开放性,并且能利用网络来进 行资源的传递和共享,还有信息的交换,因此更多的 FTP 服务器相继接入互联网络。 因此,越来越多的资源可以通过匿名 FTP 服务获得。 1.3 本课题的主要内容 FTP 协议属于应用层协议,是目前比较流行的网络文件传输协议。使用 FTP 协 议可以通过网络来传输文件。设计一个 FTP 客户端,能通过 FTP 协议连接到 FTP 服 务器,并支持一些基本的 FTP 命令,如上传和下载文件,切换路径等。 1.4 本课题的研究方法 本课题为 FTP 客户端的实现,使用的编程工具为 VC+6.0。结合以前所学的相 关知识:包括计算机网络技术、TCP/IP 详解、Winsocket 编程、信息安全相关知识 等;浏览 Windows 应用程序开发的有关资料,进一步学习面向对象语言:C+语言, 利用 FTP 协议通信的过程,并且加强学习使用 VC+6.0 开发工具。 1.5 论文结构 本论文主要由三大部分组成:绪论、相关内容简介和 FTP 客户端分析与程序实 现。其中,相关内容简介介绍了 FTP 的基本概念和两种模式、内容分发网络以及开 发环境。而第三部分主要阐述了 FTP 客户端的功能分析和各模块的设计与函数实现。 扬州大学本科毕业设计(论文) 第 3 页 第 2 章 课题相关内容简介 2.1 FTP 简介 FTP(File Transfer Protocol)是基于 TCP/IP 协议来进行运用的协议之一。 FTP 是基于网络文件共享的协议,它是由一系列的规范性文件制定的,目的是提高 文件的共享性,提供非直接访问远程主机的办法,让保存媒介能够对客户与进行透 明度高、可靠性强以及传输效率的数据传送。简而言之,FTP 的目的是在两台不同 时处于本地连接的主机之间进行文件的拷贝。其中,从远程计算机上把文件复制到 自己的本地计算机中,这个行为被称作“下载(download) ”文件。相对的,如果把 本地计算机上的文件复制到远程主机上,则称之为“上传(upload) ”文件。一般来 说,FTP 的命令端口为 21,数据传输端口为 20。FTP 协议在 TCP/IP 协议栈中的位置 如表 2.1: 表 2.1 TCP/IP 协议栈 HTTP FTP TELN SMTP DNS TFTP NMP 应用层 TCP UDP 传输层 IP 互联网络层 X25 ISDN LAN WLAN FDDI ATM 网络接口层 下表是几个著名的 TCP 端口号: 表 2.2 TCP 端口号 TCP 端口号 关键字 描述 20 FTP-DATA 文件传输协议数据 21 FTP 文件传输协议控制 23 TELENET 远程登录协议 25 SMTP 简单邮件传输协议 53 DOMAIN 域名服务器 80 HTTP 超文本传输协议 扬州大学本科毕业设计(论文) 第 4 页 110 POP3 邮局协议 119 NNTP 新闻传送协议 为了从远程主机上拷贝文件,我们就得启动本地计算机上的 FTP 客户端在和远 程主机上的服务器。其中,本地计算机上的 FTP 客户端请求拷贝 FTP 服务器上的文 件。而远程主机的上的 FTP 服务器则响应客户端的请求把客户端指定的文件从服务 器上传送到本地计算机中。FTP 使用得模式是“客户端/服务器”模式,这就要求用 户必须安装 FTP 客户端程序在自己的本地计算机上才能使用 FTP 服务。 FTP 协议的目的是在两台不同时处于本地连接但同时处于 Internet 网络中的主 机之间利用 TCP/IP 协议进行文件的拷贝。首先要开启本地计算机上的 FTP 客户端, 接着向远程主机上的 FTP 服务器发送连接请求,然后 FTP 服务器响应连接请求并与 客户端建立连接,再接着客户端发送数据传输命令给服务器,而服务器在收到数据 传输指令后返回相应的响应,并实施准确的指令。然而 FTP 服务一直以来都有一个 制约:若是客户没有在相应的 FTP 服务器上注册从而取得权限,也就是说,假如客 户并没有 FTP 服务器上相应的账号和密码,那该客户就不能在本地计算机的 FTP 客 户端和 FTP 服务器之间进行文件的传送。但有一个例外就是匿名的 FTP 服务器,这 种 FTP 服务器能够让客户以匿名的身份和 FTP 服务器建立连接并下载一些开放的共 享文件,从而可以让客户避免繁琐的注册过程或者泄露自己的信息。客户可以利用 特别的账号“Anonymous”有限制性的访问 FTP 服务器上一些开放的共享文件。现如 今,绝大部分的系统都要求客户把自己的 Email 作为登陆的账号来注册使用,从而 方便各系统能更好地跟踪访问者。考虑到 FTP 服务器的安全因素问题,几乎所有的 匿名 FTP 服务器只给予客户下载开放的共享文件的权限,而不开放客户上传本地计 算机上文件的权限。也就是说,用户只能从匿名 FTP 服务器主机上拷贝文件到自己 的本地计算机上而不能把本地计算机上的文件拷贝到匿名 FTP 服务器主机上。此外, 提供匿名登陆服务的 FTP 服务器也会采取另外的一些防护手段来避免服务器上的文 件被客户随意的窜改和删除,同时用来防备计算机病毒的侵害。随着网络的发展壮 大,在网络上获得信息资源的方式也在改变,但是匿名 FTP 作为最主要的方式之一 总是经久不衰。在网络中,多如繁星的 FTP 服务器提供着匿名的 FTP 服务,方便网 络中的人们获取共享资源。 扬州大学本科毕业设计(论文) 第 5 页 2.1.1 FTP 工作模式 FTP 的工作模式有两种:其中一种称 Standard(也称为主动模式或者 PORT 模式), 而另外的一种被称为 Passive(即被动模式或者 PASV 模式)。简单来说,处于 Standard 方式下的 FTP 客户端会将 PORT 指令传送到 FTP 服务器上;同理,处于 Passive 方式下的 FTP 客户端会将 PASV 指令传送给 FTP 服务器。 1.Standard 模式:即 PORT 模式,处于这种模式下的 FTP 客户端第一步会向 FTP 服务器 21 端口发送连接请求,然后建立连接,之后也利用该连接向 FTP 服务器传送 指令和接收来自 FTP 服务器的指令,当 FTP 客户端要接收 FTP 服务器上发送来的数 据之际,客户端通过前面建立的指令连接向发送指令“PORT” 。而这个“PORT”指令 包括 FTP 客户端用来接收数据的端口号。然后,FTP 服务器利用 20 端口与 FTP 客户 端指定接收数据的端口建立连接并传输数据。客户端和服务器之间传输数据必需利 用其他端口重新建立连接,用来传输指令的连接就只能发送指令,不允许用来发送 数据。 Standard 模式下的 FTP 服务器务必容许以下的传送条件才能让数据通过布置于 客户端操作系统前面的防火墙。 (1)FTP 客户端的任意一个端口与 FTP 服务器的 21 号端口创建连接。 (2)FTP 服务器的 21 号端口与客户端前面使用来发送请求的端口建立连接。 (3)FTP 服务器上的 20 号端口向客户端任意一个大于 1023 的端口发送请求并创 建连接。 (4)客户端使用任意一个大于 1023 的端口响应 FTP 服务器的 20 号端口发来的连 接请求,然后建立数据连接连接。 图 2.1 FTP 主动模式的连接过程图 在图 2.1 FTP 主动模式的连接过程图中,首先是客户端发送连接请求到 FTP 服 务器的命令端口,然后传送指令“PORT 1027”给服务器端。接着 FTP 服务器会向客 户端的命令端口返回一个“ACK (Acknowledgement,即确认字符)“,并建立连接用 ServerClient 数据端口:20命令端口:21命令端口:1026数据端口:1027 2 3 4 1 扬州大学本科毕业设计(论文) 第 6 页 来接收和发送指令。然后,FTP 服务器通过自己的数据端口 20 向客户端发送连接请 求,并与客户端的数据传送端口 1027 建立连接。之后客户端就会向服务器返回一个 “ACK“指令。 利用 Standard 模式的 FTP 服务在网络中总是会遇到很多问题。这是因为使用主 动模式的 FTP 客户端不是真的在自己的数据端口和 FTP 服务器的数据端口之间建立 新的连接,它只是告诉服务器客户端正在监听的端口,而服务器通过指令连接收到 FTP 客户端发来的数据传输的请求指令后反过来与客户端监听的端口建立新的连接。 一般来说,这种情况都会被处于客户端操作系统前端的防火墙阻塞,因为这是一个 从外部系统到内部客户端建立的连接。 2.Passive 模式:即 PASV 模式,利用这种模式下的 FTP 客户端,会主动与服务 器建立命令连接和数据连接,而服务器建立数据连接到客户端端口会被客户端系统 上的防火墙阻塞掉的问题就能够被避免。当客户端希望建立连接到服务器之际,两 个非特权的客户端端口(端口号大于 1024)就会被开启。其中一个端口主动建立一 个指令传输连接到 FTP 服务器的 21 号端口,并且客户端会发送一个“PASV”指令给 服务器。然后一个服务器的非特权端口(端口号大于 1024)将会被开放,接着服务 器发送一个“PORT ”指令到客户端。之后客户端就会从自己的另一个非特权端口向 服务器的非特权端口建立连接,用来传输数据。 Passive 模式下的 FTP 客户端务必容许以下的传送条件才能让数据通过布置于 服务器的操作系统前面的防火墙。 (1)客户端用自己任意一个非特权端口向服务器的 21 号端口发送建立指令传输 连接的请求。 (2)服务器用自己的 21 号端口响应客户端的连接请求,并与客户端发送请求的 非特权端口建立连接。 (3)客户端使用另一个任意的非特权端口请求向服务器的任意一个非特权端口建 立数据连接。 (4)服务器从自己的非特权端口响应客户端的数据连接请求,并建立连接到客户 端的非特权数据端口。 ServerClient 数据端口:20命令端口:21命令端口:1026数据端口:1027 2 3 1 端口:2024 扬州大学本科毕业设计(论文) 第 7 页 图 2.2 FTP 被动模式连接过程图 在图 2.2 FTP 被动模式连接过程图中,用自己任意一个非特权端口向服务器的 21 号端口发送建立指令传输连接的请求,在服务器返回响应并建立连接后,客户端 通过该连接传送“PASV”指令到服务器;之后,服务器通过前面建立的连接向客户端 发送一个“PORT“指令,通知客户端自己正在监听一个非特权端口;接着,客户端再 开起一个自己的非特权端口向服务器发送连接请求;最后,服务器会响应客户端的 连接请求并用自己的非特权端口和客户端的第二个非特权端口进行连接,作为数据 传输连接使用。 FTP 的被动方式解决了许多客户端的问题,与此同时更多的问题出现在了服务 器端。其中最严重的问题便是服务器容许客户端连接服务器的非特权端口。这将给 黑客以可乘之机,不过有矛就会有盾,FTP 的保卫程序也就诞生了,其中的代表就 是 WU-FTPD,它的特点就是可以让服务器管理员圈定一些可供使用的端口,尽量减 少端口被入侵的概率。 第二大问题是因为有一部分客户端不支持 Passive 模式,这就让人们不得不去 想办法解决不支持 Passive 模式的客户端与服务器之间的连接问题。为了解决 Solaris 不支持 Passive 模式的命令行式的 FTP 工具的问题,就有人开发了 ncftp, 它是一个第三方 FTP 客户端。 随着 WWW(万维网)的广泛流行,Web 浏览器成为了绝大部分用户的 FTP 客户端。 支持 Passive 模式的 Web 浏览器仅仅会在对以 ftp:/开头的 URL 进行访问时才会进 入被动模式。服务器和防火墙的配置决定了这种方式的好坏。 从服务器外部发送来的连接请求多数会被防火墙阻塞,因此绝大部分 FTP 服务 器都不会去支持 Passive 模式,所以客户端无法穿过防火墙去连接 FTP 服务器的非 特权端口;并且许多内网中的 FTP 客户端也不能利用主动模式越过防火墙去和服务 器建立连接,因此服务器的 20 号端口无法和内网中的客户端创建新的连接,这就导 致了 FTP 服务无法在内网中进行工作。 3.主、被动模式下的 FTP 优缺点总结: (1)主动模式的 FTP 服务对管理 FTP 服务器端有益处,却不益于管理 FTP 客户端。 由于 FTP 服务器会请求向客户端的非特权端口创建数据连接,所以布置于客户端之 前的防火墙会将服务器请求的非特权端口阻塞掉,导致无法建立连接。 (2)被动模式的 FTP 服务对管理 FTP 客户端有益处,却不益于管理 FTP 服务器。 因为 FTP 客户端会发送两个请求给服务器,其中一个却是请求和服务器的一个非特 权端口建立数据连接,所以布置于服务器之前的防火墙会将客户端请求建立连接的 4 扬州大学本科毕业设计(论文) 第 8 页 非特权端口阻塞掉,让其无法正常工作。 FTP 服务器的管理员希望有尽可能多的用户来连接自己的服务器,因此他们所 管理的服务器就不得不支持被动模式。而为了缩小对服务器的危害,能够利用圈定 一部分非特权端口来尽可能的缩小服务器开放的非特权端口。因此,向超出圈定范 围的任何端口的连接请求都将被布置于服务器前面的防火墙阻塞掉。 2.1.2 FTP 传输模式 FTP 协议的任务是在两台计算机之间按进行文件传送,这两台计算机的位置、 操作系统是否相同、甚至是联接的方式都与 FTP 协议无关。如果这两台主机之间通 过 TCP 协议进行信息交流,又都同时在 Internet 上,就能够利用 FTP 协议在双方之 间进行文件的传送。虽然在不一样的操作系统上利用 FTP 服务来互相传送文件会有 一定的不同,然而 FTP 协议里面的所有基本指令结构却是没有差别的。这就为不同 系统间的文件传输奠定了基础。而 FTP 服务的传输模式包括有两种:其中一种是 ASCII 传输模式;另一种是二进制数据传输模式。 ASCII 传输模式 假如客户正从服务器下载 ASCII 码文本,并且服务器上安装的不是类 UNIX 系统, 在文件传输时 FTP 将主动把文件内容翻译成客户端的操作系统上用来保存文件的对 应格式。可是客户想要下载的文件不仅仅是文本格式的,还包括各种格式的压缩文 件、多媒体文件、数据库文件或者安装包。所以客户端要先发送“binary”指令通 知 FTP 服务器去逐字发送非文本格式的文件,不调整这些非文本格式的文件内容。 二进制数据传输模式 假如利用二进制数据传输模式来传送文件,将会把文件的位序列存储下来,使 源文件与下载的文件能逐位进行对应。纵然储存有位序列的文件对于将要传送到的 机器上所运行的操作系统而言并没有什么意义。例如,mac(苹果机)以二进制方式 传送 OS X 系统上的可执行文件到 Windows 系统上,在 Windows 系统上,此文件并不 能被执行。如果你以 ASCII 模式发送二进制文件,文件将会被强制转译。就将导致 发送速度减缓,同时也将毁坏数据,让文件失效。假如客户端和服务器的操作系统 是一样的,那么利用二进制数据传输模式来传输的文件不论是文本文件或者是数据 扬州大学本科毕业设计(论文) 第 9 页 文件都会是正常的,不会被损坏。 2.2 内容分发网络简介 现在绝大部分客户访问的 FTP 服务都是通过浏览器进行访问,因此就导致了浏 览器请求路径太远而引起的传输缓慢,所以就出现了内容分发网络(CDN,Content Delivery Networks)。 内容分发网络彻底扭转了 Web 缓存想法。与客户在附近的缓存中寻找请求的页 面副本不同,CDN 为客户提供了这样的信息:在一组分布在不同的地点的节点中哪 个节点拥有所请求页面的副本,并且只是客户端使用附近的节点作为服务器13。 内容分发网络的提出是尽量提高 Internet 上的数据传送速度和稳定性。在 Internet 上布置节点服务器来组建一个虚拟网络,使 CDN 服务可以及时地依凭各种 综合信息把客户的请求另导向据离发出请求路径最短的服务节点。让客户可以减少 等待时间,避免文件传输中的不稳定导致的文件损坏问题。 2.3 开发环境简介 Visual C+ 6.0,简称 VC 或者 VC6.0,是 1998 年微软公司发布的一款 Win32 开发环境程序,面向对象的可视化集成编程系统。Visual C+ 6.0 能主动生成程序 的框架、拖动式普通界面设计、快捷的代码编写、并且还包含了多种开发语言,便 于众多程序员们进行开发。Visual C+1.0 在 1993 年被微软发布后,VC 系列已经被 广大程序员们接受并不断随着它的更新换代而加强自己的编程能力。尽管微软在后 面发布了 Visual C+.NET(Visual C+7.0),但 Visual C+6.0 依然是一个 C+程 序员比较喜欢的编译器,并且还是一个在 Windows 操作系统下的可视化集成开发环 境(integrated development environment,IDE)。很多不同的组件组成了 VC6.0,其中,囊括了 AppWizard、编辑器、Class Wizard、调试器等工具。而这些 工具被集成在一起成了一个开发环境。 扬州大学本科毕业设计(论文) 第 10 页 第 3 章 FTP 客户端的分析与程序实现 3.1 软件总体分析与设计 3.1.1 软件总体分析 客户想要使用 FTP 服务就得在自己的计算机上安装 FTP 客户端,而客户端一定 具有如验证连接、上传文件、下载文件等模块。 三大模块的分析如下: 1.验证连接模块:客户将自己的本地计算机和服务器建立连接,发送账号及密 码给服务器进行验证,验证通过则登陆服务器,假如没有通过则返回验证失败提示。 2.上传文件模块:客户通过验证成功登陆服务器后就能选择一个本地磁盘里的 文件上传到服务器上。 3.下载文件模块:客户已经建立连接到 FTP 服务器后,就能获取服务器目录下 的文件列表,当客户选择好将要下载的文件后,点击“文件下载”按钮就会弹出文 件保存窗口,让客户选择文件的保存路径后进行文件的下载工作。而使用 FTP 服务, 就不会局限于文件的大小和类型,理论上无论文件多大或者是什么类型都能进行上 传和下载。 有了这三个基本的功能模块,客户端的基本应用功能即可实现。 3.2 各模块具体设计 3.2.1 连接功能设计 该 FTP 客户端通过一个 WinSocket 与 FTP 服务器进行连接,接着利用该 Socket 向服务器发送命令。这期间,我们凭借发送-响应的机制,也就是向服务器传输 FTP 指令,接着接收服务器返回的响应信息,客户端分析该信息,继而执行相关操 作,之后客户端再发送下一条命令。一般情况下,客户端利用一个 Socket 和 FTP 服 务器的对应端口建立指令连接,而这个连接就用来传输客户端和服务器之间的指令 以及响应信息。其中的操作如“连接服务器” 、“上传文件” 、“下载文件”和“更新 目录” ,就利用这个 Socket 向服务器传输指令,让服务器执行相应的操作。 扬州大学本科毕业设计(论文) 第 11 页 1客户端与服务器连接 FTP 是基于 TCP 之上应用层协议,使用 21 端口。假如用户成功验证通过并登陆 到服务器后,服务器就会返回一个响应:“220 GMS (Version 5.0) ” 。 服务器返回的响应的数字 220 表示已经成功建立连接,响应的数字之后的字符 串根据不同的服务器会有所差异,而客户仅仅需要关注前面的那 3 个数字就够了。 2用户名和密码认证 客户端利用命令端口传输账号信息给服务器,如:USER WJX。若是服务器在数 据库中验证了用户 WJX 的存在,就会返回一个响应:“331 User name okay, need password” 。 接着客户端继续通过命令端口发送密码给服务器,如:PASS 123456,服务器与 数据库中用户名为 WJX 的用户的密码相匹配,如果密码正确,则返回一个响应: “230 User logged in, proceed” ,假如账号或密码其中之一没有通过验证,将会 返回:“530 Not logged in” 。 。 前面讲过,FTP 服务大部分都支持匿名登陆,如:USER anonymous,将会返回 响应,如:331 Anonymous access allowed, send identity (e-mail name) as password。 3应答码及其含义 FTP 的客户端与服务器之间的连接有很多应答码,下面列出其中一些比较常见 的应答码: 110:重新启动标记应答。 120:服务在 nnn 分钟内准备好。 125:数据连接已打开,准备传送。 150:文件状态良好,打开数据连接。 200:命令成功。 202:命令未实现。 211:系统状态或系统帮助响应。 212:目录状态。 213:文件状态。 214:帮助信息,信息仅对人类用户有用。 215:名字系统类型。 220:对新用户服务准备好。 221:服务关闭控制连接,可以退出登录。 225:数据连接打开,无传输正在进行。 226:关闭数据连接,请求的文件操作成功。 扬州大学本科毕业设计(论文) 第 12 页 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:未执行请求的操作:文件名不合法。 3.2.2 客户端界面设计 我仅仅设计了一个界面,整合了 FTP 客户端基本的几个功能,包括输入数据和 服务器返回的信息的显示,而这个界面里主要囊括了以下五个部分: 1.数据输入部分:用来让用户输入服务器地址,用户名,密码。 2.文件列表显示部分:可以显示出服务器上公开的文件列表,让客户能进行选 择下载。 3.上、下载部分:可以弹出小窗口显示下载成功或上传成功。 4.操作按钮部分:通过点击“连接服务器” 、 “文件上传” 、 “文件下载” 、 扬州大学本科毕业设计(论文) 第 13 页 “更新文件列表” 、 “关闭连接” 、 “退出客户端”等按钮来实现客 户端的具体操作。 5. 消息显示部分:显示当前连接信息、下载和上传成功的信息。这五个部分都 是使用使用 VC+6 来排版的。 设计的主界面如图 3.1: 图 3.1 FTP 客户端界面 登录认证并点击“更新文件列表”按钮后的图片: 扬州大学本科毕业设计(论文) 第 14 页 图 3.2 登录认证并显示服务器内的文件 3.2.3 客户端连接流程图 运行客户端后,首先是连接服务器,需要输入服务器 IP 地址、连接端口、用户 名和密码,点击“连接服务器”按钮后开始连接服务器。 下图为客户端连接流程图: 发送用户名及 密码至服务器 是 否 用户输入服务器地址及 用户名和密码 连接服务器 是否连接成功在信息显示模块显示连接成 功 在信息显示模块显示连接失败 获取服务器文件列表 刷新服务器文件显示文件列表 扬州大学本科毕业设计(论文) 第 15 页 图 3.2 客户端连接流程图 连接的结果有两种,即图中显示的连接失败和连接成功。 3.2.4 上传子模块流程图 当用户点击“文件上传”按钮后,用户可以选择需要上传的文件,将本地计算 机上的文件上传至 FTP 服务器上。下图为上传子模块的流程图: 是 重新获取服 务器文件列表 否 点击上传按钮 弹出文件选择对话框 获取用户选择的文件名 新建一个上传任务 登录到 FTP 服务器目 标目录下 更新服务器文件列表 弹出对话框显示上传成 功 上传是否成功 扬州大学本科毕业设计(论文) 第 16 页 图 3.3 上传子模块流程图 上传的结果也有两种,即上传失败或成功,失败时会提示用户上传失败,原因 可能是权限问题,如果成功上传,则提示上传成功。 3.2.5 下载子模块流程图 当用户在服务器上的文件列表中选择想要下载的文件后,点击“文件下载”按钮 来发送下载指令给服务器,然后服务器就会把文件传输过来。 下图为下载子模块流程图: 选择文件在本机存储位置 将信息传送至任务 是 重新获取服务器文件列表 否 弹出对话框显示上传失 败 清除线程 选择要下载的文件 点击下载按钮 获取文件信息 新建下载任务 登录到 FTP 服务器目 标目录下 弹出对话框显示下载成 功 更新服务器文件列表 下载是否成功 扬州大学本科毕业设计(论文) 第 17 页 图 3.4 下载子模块流程图 3.2.6 CAsyncSocket 类与 CSocket 类 1.CAsyncSocket 类 在微软基础类库中,CAsyncSocket 类封装了异步套接字的基本功能。用户使用 该类进行网络数据传输的步骤如下: (1)调用构造函数创建套接字对象。 (2)如果创建服务器端套接字,则调用函数 Bind()绑定本地 IP 和端口,然后调 用函数 Listen()监听客户端的请求。如果请求到来,则调用函数 Accept()响应该请 求。如果创建客户端套接字,则直接调用函数 Connect()连接服务器即可。 (3)调用 send()等功能函数进行数据传输与处理。 (4)关闭或销毁套接字对象。 2.CSocket 类派生于 CAsyncSocket 类。该类不但具有 CAsyncSocket 类的基本 功能,还具有串行化功能。用户在实际编程中,通过将 CSocket 类与 CsocketFile 类和 Carchive 类一起使用,能更好的管理数据以及发送数据。用户使用该类进行网 络编程的步骤如下 (1)创建 CSocket 类对象。 (2)如果创建服务器端套接字,则调用函数 Bind()绑定本地 IP 和端口,然后调 用函数 Listen()监听客户端的请求。如果请求到来,则调用函数 Accept()响应该请 求。如果创建客户端套接字,则直接调用函数 Connect()连接服务器即可。 (3)创建与 CSocket 类对象相关联的 CSockeoFile 类对象。 (4)创建与 CSockeoFile 类相关联的 CArchive 对象。 (5)使用 CArcnive 类对象在客户端和服务器之间进行数据传输。 (6)关闭或销毁 CSocket 类、CSockeoFile 类和 CArchive 类的 3 个对象5。 清除线程 弹出对话框显示下载失 败 扬州大学本科毕业设计(论文) 第 18 页 3.3 模块的程序实现 3.3.1连接管理的程序实现 在用户打开软件后进入主窗体,在主机IP输入框中输入服务器的IP地址、登陆 用的用户名及密码后。点击“连接服务器”按钮,就会传输一个连接请求给服务器, 继而服务器返回一个响应,如果响应码为220开头的字符串就证明服务器可以和客户 端进行连接,之后客户端把用户名发送给服务器,服务器返回的响应码是以331开头 的字符串就证明用户名通过验证,但需要正确的密码才能登陆。继而客户端把自己 的密码传输给服务器,假如服务器返回的响应是以230开头的字符串就证明密码验证 通过,然后就能让客户端成功登录。连接服务器及验证信息的代码如下: void CFTP_clientDlg:OnConnect() /创建 socket if( !sock_client.Create() ) AfxMessageBox(“socket 创建失败“); return; UpdateData(true); /连接服务器 if( !sock_client.Connect(m_host,m_port) ) AfxMessageBox(“socket 连接服务器失败“); return; MySockRecv(); CStringsend_msg; /专用来发送命令 /发送用户名 send_msg = “USER “; send_msg += m_username; send_msg += “rn“; MySockSend(send_msg); MySockRecv(); /发送密码 send_msg = “PASS “; send_msg += m_password; send_msg += “rn“; MySockSend(send_msg); MySockRecv(); 扬州大学本科毕业设计(论文) 第 19 页 /禁用 4 个文本编辑框,1 个按钮 GetDlgItem(IDC_HOST)-EnableWindow(false); GetDlgItem(IDC_PORT)-EnableWindow(false); GetDlgItem(IDC_USERNAME)-EnableWindow(false); GetDlgItem(IDC_PASSWORD)-EnableWindow(false); GetDlgItem(IDC_CONNECT)-EnableWindow(false); 3.3.2获取文件列表信息函数 在连接上以后,就可以看服务器上的文件了,所以要用一个循环函数来寻找文 件名,使客户端上只显示文件的名称就行,而不需要的信息就过滤了。 /接收并解析文件列表信息 void CFTP_clientDlg:Parse_list() /用新的 socket 和端口接收文件信息 char filelist1024 = “; if( SOCKET_ERROR = sock_temp.Receive(filelist,1024) ) AfxMessageBox(“数据接收失败“); return; CString parselist = filelist; /字符串的长度 long len = parselist.GetLength(); /解析到所有的文件名 char filename32 = “; int index_rn = parselist.Find(“rn“); int i,j = 0; while(len-1 != index_rn+1) 扬州大学本科毕业设计(论文) 第 20 页 for(i = index_rn-1;parselist.GetAt(i) != ;i-);/获取文件 名起始位置 for(i = i+1;iLoadIcon(IDR_MAINFRAME); void CFTP_clientDlg:DoDataExchange(CDataExchange* pDX) CDialog:DoDataExchange(pDX); /AFX_DATA_MAP(CFTP_clientDlg) DDX_Control(pDX, IDC_LISTFILE, m_listfile); DDX_Control(pDX, IDC_LISTINFO, m_listinfo); DDX_Text(pDX, IDC_HOST, m_host); DDX_Text(pDX, IDC_PASSWORD, m_password); DDX_Text(pDX, IDC_USERNAME, m_username); DDX_Text(pDX, IDC_PORT, m_port); /AFX_DATA_MAP 扬州大学本科毕业设计(论文) 第 31 页 BEGIN_MESSAGE_MAP(CFTP_clientDlg, CDialog) /AFX_MSG_MAP(CFTP_clientDlg) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_BN_CLICKED(IDC_CONNECT, OnConnect) ON_LBN_DBLCLK(IDC_LISTFILE, OnDblclkListfile) ON_BN_CLICKED(IDC_UPDATE, OnUpdate) ON_BN_CLICKED(IDC_STOREFILE, OnStorefile) ON_BN_CLICKED(IDC_LOADFILE, OnLoadfile) ON_BN_CLICKED(IDC_QUIT, OnQuit) /AFX_MSG_MAP END_MESSAGE_MAP() / / CFTP_clientDlg message handlers BOOL CFTP_clientDlg:OnInitDialog() CDialog:OnInitDialog(); / Add “About.“ menu item to system menu. / IDM_ABOUTBOX must be in the system command range. ASSERT(IDM_ABOUTBOX ASSERT(IDM_ABOUTBOX AppendMenu(MF_SEPARATOR); pSysMenu-AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); / Set the icon for this dialog. The framework does this automatically / when the applications main window is not a dialog SetIcon(m_hIcon, TRUE);/ Set big icon 扬州大学本科毕业设计(论文) 第 32 页 SetIcon(m_hIcon, FALSE);/ Set small icon / TODO: Add extra initialization here return TRUE; / return TRUE unless you set the focus to a control void CFTP_clientDlg:OnSysCommand(UINT nID, LPARAM lParam) if (nID dlgAbout.DoModal(); else CDialog:OnSysCommand(nID, lParam); / If you add a minimize button to your di
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 国开学习网《助理信用管理师实务》形考任务1-4答案
- 工业废弃物处理与节能减排
- 工业排放标准及监管政策分析
- 工业安全技术的创新与升级
- 4s店保安管理制度
- 标准押运车队管理制度
- 校医工作职责管理制度
- 校园加强值班管理制度
- 校园意外应急管理制度
- 校园水果仓库管理制度
- (正式版)JTT 1497-2024 公路桥梁塔柱施工平台及通道安全技术要求
- MOOC 园林植物遗传育种学-北京林业大学 中国大学慕课答案
- 抖音种草方案
- 术后镇痛慢性疼痛癌性疼痛诊疗标准规范及作业流程
- 2022AHA-ACC-HFSA心衰管理指南解读
- 《小石潭记》教学实录及反思特级教师-王君
- 水泥混凝土道路耐久性提升技术
- 公交驾驶员培训课件
- 儿童意外伤害与预防
- 乌兹别克文学史
- 幼儿园区角观察记录表大班建构区
评论
0/150
提交评论