FTP多线程下载工具毕业论文.docx_第1页
FTP多线程下载工具毕业论文.docx_第2页
FTP多线程下载工具毕业论文.docx_第3页
FTP多线程下载工具毕业论文.docx_第4页
FTP多线程下载工具毕业论文.docx_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

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

文档简介

本 科 生 毕 业 设 计(论 文)论文题目:FTP多线程下载工具姓名:黄辰学号:1021111221班级:10211112班年级:2010级专业:软件工程学院:软件学院指导教师:张军(副教授)完成时间:2014年 5 月13日作 者 声 明本人以信誉郑重声明:所呈交的学位毕业设计(论文),是本人在指导教师指导下由本人独立撰写完成的,没有剽窃、抄袭、造假等违反道德、学术规范和其他侵权行为。文中引用他人的文献、数据、图件、资料均已明确标注出,不包含他人成果及为获得东华理工大学或其他教育机构的学位或证书而使用过的材料。对本设计(论文)的研究做出重要贡献的个人和集体,均已在文中以明确方式标明。本毕业设计(论文)引起的法律结果完全由本人承担。矚慫润厲钐瘗睞枥庑赖。本毕业设计(论文)成果归东华理工大学所有。特此声明。毕业设计(论文)作者(签字): 签字日期: 年 月 日 本人声明:该学位论文是本人指导学生完成的研究成果,已经审阅过论文的全部内容,并能够保证题目、关键词、摘要部分中英文内容的一致性和准确性。聞創沟燴鐺險爱氇谴净。 学位论文指导教师签名: 年 月 日FTP多线程下载工具黄辰Multithread Downloading SystemHuang chen2014年5月13日摘 要随着中国现代互联网行业的飞速发展,网络用户的数量以及用户年龄阶层在不断的扩大。网络需求的增长,刺激着IT技术不断的提升。残骛楼諍锩瀨濟溆塹籟。网络使人与人、人与事之间的交互变得简单高效。对远程资源的访问是网络最基本的功能之一,高效的访问速度,构成了网络如今的蓬勃发展。本文主要对“从远程服务端获取资源”进行了论述,讲解了网络的重要性,以及对人类的生活带来的影响。酽锕极額閉镇桧猪訣锥。本文开始介绍了网络下载的基本概念,分析了FTP协议下载的理论及其发展历程。对FTP协议的地址格式、传输模式、连接模式进行了简单的介绍。接下来论述了现代网络下载工具的技术原理及实现,分析了断点续传技术和多线程编程技术对网络下载的影响。彈贸摄尔霁毙攬砖卤庑。本文设计了一个以FTP下载协议为基础、多线程编程为技术手段的FTP多线程下载工具。该系统利用多线程编程技术,模拟多个客户端与远程服务器进行通信,使系统下载速度快。利用复合文档存储下载流,使本地存储速度快,整合率高,易于检查数据完整性。利用面向对象的思维设计程序结构,使程序易于扩展协议内容。文章的最后,给出了部分程序源代码,讲解了设计的思路。謀荞抟箧飆鐸怼类蒋薔。关键词: 多线程下载; FTP; 断点续传;AbstractWith the rapid development of modern Internet industry in China, the number of network users as well as the age is constantly expanding. The growth of network demands, continuously stimulate the promotion of IT technology.厦礴恳蹒骈時盡继價骚。Internet enable the interaction among people and objects becomes easier and more efficient. The access to remote network resources is one of the basic functions of network, and rapid speed of access forms the prosperity of network. This article expressed the theme of get the resources from a remote server , And also explained the importance of the network, and the impact on human beings life .Firstly,this article presented the basic concepts of download, analyzed the theory of FTP protocol as well as the process of development . And also simply introduced address format ,transmission mode as well as the connection mode of FTP protocol.Then it discussed the technology, principle and implementation of network download tools in nowadays,And also analyze the impact of HTTP technology as well as the multi-threaded programming techniques on the downloads from the network.茕桢广鳓鯡选块网羈泪。Finally, the article introduced the design of the multi-threaded downloading tool that based on FTP protocol and taken multi-threaded program as technical means. The system maked the uses of multi-threaded programming techniques to simulate multiple clients to communicate with a remote server.This technology makes the downloading speed of the system faster.This system uses the composite document to storage downloading stream, that makes speed of storage faster, promotes the efficiency of integration,and checks integrity of data easier.In this program ,Using the object-oriented method to develop the construction of the program , make the program easy to extend the protocol.In the end of the article,it presents some source codes, analyses the cogitation of the design .鹅娅尽損鹌惨歷茏鴛賴。Keywords: Multi-threaded Download; FTP; Breakpoint Resume;籟丛妈羥为贍偾蛏练淨。目 录1绪论1預頌圣鉉儐歲龈讶骅籴。1.1 研究意义及目的1渗釤呛俨匀谔鱉调硯錦。1.2 研究内容1铙誅卧泻噦圣骋贶頂廡。2程序开发的技术基础2擁締凤袜备訊顎轮烂蔷。2.1 FTP协议2贓熱俣阃歲匱阊邺镓騷。2.1.1 FTP协议简介2坛摶乡囂忏蒌鍥铃氈淚。2.1.2 FTP的工作原理2蜡變黲癟報伥铉锚鈰赘。2.2 多线程技术4買鲷鴯譖昙膚遙闫撷凄。2.2.1 多线程简介4綾镝鯛駕櫬鹕踪韦辚糴。2.2.2 线程的创建4驅踬髏彦浃绥譎饴憂锦。2.3 断点续传技术5猫虿驢绘燈鮒诛髅貺庑。2.3.1 断点续传简介5锹籁饗迳琐筆襖鸥娅薔。2.3.2 多线程技术与断点续传技术的结合5構氽頑黉碩饨荠龈话骛。2.4 复合文档5輒峄陽檉簖疖網儂號泶。2.5 套接字编程简介6尧侧閆繭絳闕绚勵蜆贅。2.6 Qt开发平台介绍7识饒鎂錕缢灩筧嚌俨淒。3系统需求分析9凍鈹鋨劳臘锴痫婦胫籴。3.1 开发背景及目的9恥諤銪灭萦欢煬鞏鹜錦。3.2 下载工具应具备的基础功能9鯊腎鑰诎褳鉀沩懼統庫。3.2.1远程访问模块9硕癘鄴颃诌攆檸攜驤蔹。3.2.2下载管理模块10阌擻輳嬪諫迁择楨秘騖。3.2.3配置管理模块10氬嚕躑竄贸恳彈瀘颔澩。3.2.4日志输出模块10釷鹆資贏車贖孙滅獅赘。3.3 任务分析10怂阐譜鯪迳導嘯畫長凉。3.3.1性能要求10谚辞調担鈧谄动禪泻類。3.3.2运行环境11嘰觐詿缧铴嗫偽純铪锩。3.4数据流分析11熒绐譏钲鏌觶鷹緇機库。4系统概要设计14鶼渍螻偉阅劍鲰腎邏蘞。4.1 系统逻辑结构14纣忧蔣氳頑莶驅藥悯骛。4.2 系统类图设计14颖刍莖蛺饽亿顿裊赔泷。4.3 系统项目文档结构15濫驂膽閉驟羥闈詔寢賻。4.4 系统重用设计16銚銻縵哜鳗鸿锓謎諏涼。5系统功能的详细设计和实现20挤貼綬电麥结鈺贖哓类。5.1 程序界面设计实现20赔荊紳谘侖驟辽輩袜錈。5.2 程序返回值的定义21塤礙籟馐决穩賽釙冊庫。5.3 服务器接受请求应答实现22裊樣祕廬廂颤谚鍘羋蔺。5.4 FTP命令的管理与执行的技术实现23仓嫗盤紲嘱珑詁鍬齊驁。5.4.1 FTP命令管理的技术实现23绽萬璉轆娛閬蛏鬮绾瀧。5.4.2 FTP命令执行的技术实现25骁顾燁鶚巯瀆蕪領鲡赙。5.5 下载模块的技术与实现25瑣钋濺暧惲锟缟馭篩凉。5.5.1 多线程通信的设计实现26鎦诗涇艳损楼紲鯗餳類。5.5.2 线程任务分配的设计实现27栉缏歐锄棗鈕种鵑瑶锬。5.5.3 复合文档的使用与合并数据的技术实现29辔烨棟剛殓攬瑤丽阄应。5.5.4 下载线程的设计与实现31峴扬斕滾澗辐滠兴渙藺。5.5.5 系统退出时下载模块信息保存的技术实现33詩叁撻訥烬忧毀厉鋨骜。结论1则鯤愜韋瘓賈晖园栋泷。致 谢1胀鏝彈奥秘孫戶孪钇賻。参考文献1鳃躋峽祷紉诵帮废掃減。东华理工大学毕业设计(论文)Error! No text of specified style in document.351 绪论随着21世纪网络信息时代的到来,网络在人类的生活中已经是不可或缺的一部分。人们在网络上办公、看新闻、听音乐、娱乐、购物等等,上网时间占据了生活的大部分。稟虛嬪赈维哜妝扩踴粜。1.1 研究意义及目的如今,网络用户的数量在不断的增长,网络需求也在不断的扩大,网络负载率在不断的提高。网络的访问速率影响着用户的上网体验,现代网络普遍存在访问速率过慢的现象。在这种情况下,多线程下载工具呼之欲出。用以改善下载资源过慢的状况。陽簍埡鲑罷規呜旧岿錟。在传统的C/S架构中,通过FTP下载文件的步骤为:客户端发送文件获取命令给服务端;服务端响应FTP命令,向客户端传输文件;客户端接收文件数据,下载结束。传统的资源获取方式简单方便,在网络时代刚刚成型的初期,网络用户量并不庞大,这种方式很好的解决了用户获取资源的问题。如今,网络用户数量在不断的增长,导致网络的访问速率过低。为了能更快的获取网络资源,需要在传统的方式上进行改进。沩氣嘮戇苌鑿鑿槠谔應。1.2 研究内容本文主要研究了网络下载文件的原理及相关的技术实现。系统基于FTP(文件传输协议),采用FTP的RFC959标准,实现了基本的FTP命令。系统结合多线程技术和断点续传技术实现了对文件的并发分块下载,可以有效的提高下载速度。钡嵐縣緱虜荣产涛團蔺。2 程序开发的技术基础2.1 FTP协议2.1.1 FTP协议简介File Transfer Protocol(FTP)翻译为“文件传输协议”,它可以在网络上任意两台计算机之间传输文件,是当前使用广泛的协议之一。FTP协议普遍应用在C/S架构中,可以在控制台命令中手工使用FTP命令,这样可以方便熟悉FTP命令的相关参数及作用。FTP地址格式如下所示:(阅读本文前,读者可以去网络上搜寻相关的FTP内容)懨俠劑鈍触乐鹇烬觶騮。ftp:/帐号:密码ip地址(域名):端口号/路径/文件名謾饱兗争詣繚鮐癞别瀘。在上述地址格式中,只有ip地址(域名)参数是必须的,其它的参数都有默认值。在网络中存在许多“匿名”服务器,这类服务器用于向公众提供免费的文件传输服务,此类FTP都有统一的匿名登录帐号:anonymous。呙铉們欤谦鸪饺竞荡赚。2.1.2 FTP的工作原理FTP的传输模式有两种。ASCII传输模式是以ASCII编码传输数据,这种模式主要用来传输文字信息等一系列非二进制格式存储的文件;二进制传输模式是以二进制流传输数据,这种模式主要用来传输以二进制格式存储的文件。莹谐龌蕲賞组靄绉嚴减。FTP的连接模式有两种。主动连接是指客户端主动创建一个数据连接,并将数据连接的地址通过PORT命令发送给服务端,服务端连接到这个端口上。被动连接是指客户端发送PASV命令给服务端,由服务端创建一个数据连接,并将数据地址和端口号发送给客户端,客户端连接到这个端口上。麸肃鹏镟轿騍镣缚縟糶。FTP比其他网络协议复杂。通信需要创建两条连接:控制连接和数据连接。控制连接是初始时客户端向服务端发送的连接。控制连接用来发送控制命令,比如:连接建立后,发送命令USER进行登录。登录成功后可以发送LIST命令获取当前的文件列表,发送CWD 命令改变服务器的工作路径等等。納畴鳗吶鄖禎銣腻鰲锬。数据连接指的是传输文件内容的连接。比如:在控制连接上用户发送LIST命令请求获取服务器的文件列表时,服务器与客户端会通过两种连接模式中的一种协商好数据端口和数据地址,然后建立连接。在这条连接上传输数据。FTP的通信如图1所示:風撵鲔貓铁频钙蓟纠庙。图1 FTP通信图通过FTP,客户端与服务器之间建立一问一答的交互方式。客户端发送FTP命令,命令由小于四个字母的缩写组成,一个命令对应一个任务。按照命令的功能,可以将命令分为:访问控制、传输参数和FTP服务。服务器返回应答信息,每个FTP命令都会有一个以上的应答信息。应答的格式如下: 灭嗳骇諗鋅猎輛觏馊藹。应答码 空格 文本 CRLF应答信息的开头是应答码,以空格分隔后跟随着描述文本。由于应答码都是字母缩写组成,用户不便于直观阅读,描述文本用来给用户提供相关的描述信息。FTP登录流程图如图2所示:铹鸝饷飾镡閌赀诨癱骝。图2 FTP登录流程图2.2 多线程技术2.2.1 多线程简介线程,也称作轻量级的进程。它是一组指令的集合,可以在程序里独立的执行,是操作系统的最小执行单元。多线程编程技术建立在操作系统支持单进程中执行多个线程的能力上。攙閿频嵘陣澇諗谴隴泸。多线程编程技术,使应用程序的效率得到了很好的提升,但也使原本复杂的编程变得更加的繁琐。在以往的单线程编程中,程序的执行,是按照代码顺序执行的,符合人类大脑的思考方式。然而在多线程编程中,多个线程之间采用的是异步执行的方式,线程之间是无序的,同时都在运行。开发人员需要考虑每个线程的运行情况,特别要注意防止死锁的发生。趕輾雏纨颗锊讨跃满賺。多线程技术的优点:由于多个线程之间是并发执行的,提高了应用程序的运行效率;降低了系统处于闲置状态的时间,提高了系统资源利用率;应用程序可以前后台操作,保证应用程序始终处于可响应状态。夹覡闾辁駁档驀迁锬減。多线程技术的缺点:使程序员编码更加复杂,需要考虑一系列多线程独特的问题,如:死锁问题;增加了应用程序的管理开销和操作系统的调度开销。视絀镘鸸鲚鐘脑钧欖粝。死锁,指的是二个或二个以上的运行线程在争夺有限的系统资源时,造成了一种相互等待的现象。线程死锁发生后,相互等待的线程在没有其他外界的协助下,将永远处于等待状态。多线程编程应仔细的考虑代码是否会造成死锁。偽澀锟攢鴛擋緬铹鈞錠。2.2.2 线程的创建在默认情况下,一个进程只有一个线程,从主函数main()开始执行。调用CreateThread()函数将创建一个新的线程,函数返回HANDLE句柄(句柄是保存在进程中的一个索引,指向了一个内核数据结构,称为内核对象。如:线程是一个内核对象),新线程的入口由函数的第三个参数指定。在理论情况下,一个进程可以创建任意多的线程。緦徑铫膾龋轿级镗挢廟。HANDLE CreateThread(LPSECURITY_ATTRIBUTES lpThreadAttributes,/安全属性,使用默认为NULL騅憑钶銘侥张礫阵轸蔼。SIZE_T dwStackSize,/初始堆的大小。0表示使用默认大小LPTHREAD_START_ROUTINE lpStartAddress,/线程函数的指针LPVOID lpParameter,/给线程函数的参数DWORD dwCreationFlags,/线程标志位LPDWORD lpThreadId/线程Id);图3 多线程并发运行图解2.3 断点续传技术2.3.1 断点续传简介FTP断点续传技术指的是当使用FTP协议上传或下载文件时,程序突然意外的终止或网络突然的中断,导致数据连接断开。重新开始时,下载(上传)将跳过前面已经完成的部分。疠骐錾农剎貯狱颢幗騮。FTP的断点续传功能依靠FTP命令REST。REST的参数指定了服务器将从哪个位置开始传输资源数据。当然,前提是服务器支持断点续传功能。REST命令的发送如下所示:镞锊过润启婭澗骆讕瀘。请求:TYPEI响应:200请求:PASV 响应:227 (数据连接地址和端口号)请求:REST11111(文件传输开始的地址)响应:350 .2.3.2 多线程技术与断点续传技术的结合多线程技术结合断点续传技术指的是用户在上传或下载资源数据时,将需要上传或下载的资源数据划分成N个数据块,创建多个下载线程,每一个下载线程下载不同的数据块,最后将下载完成的数据块拼接起来。榿贰轲誊壟该槛鲻垲赛。2.4 复合文档复合文档是一种COM结构化存储技术。微软的doc格式文档使用的就是复合文档技术。复合文档不仅可以存储文本信息,还可以存储各种其他类型的信息,如:图片信息、声音信息。不仅如此,复合文档还允许多个线程同时在复合文档的不同数据流中读写数据。创建复合文档的函数如下所示:邁茑赚陉宾呗擷鹪讼凑。 StgCreateDocfile(const WCHAR* pwcsName,/复合文档文件名 DWORD grfMode,/标志位 DWORD reserved, IStorage* ppstgOpen);/创建的复合文档的指针当调用StgCreateDocfile函数创建一个复合文档后,返回的第四个参数称为根存储,利用IStorage根存储的成员函数可以创建数据流。如下所示:嵝硖贪塒廩袞悯倉華糲。 HRESULT CreateStream ( Storage * This,/流所在的存储指针 const OLECHAR *pwcsName,/流名字 DWORD grfMode,/标志位 DWORD reserved1, DWORD reserved2, IStream *ppstm);/返回的流指针创建数据流后,可以调用IStream的成员函数Read和Write读写数据。除了创建数据流,还可以调用它的另一个成员函数CreateStorage(.)创建子存储,子存储又可以创建自己的数据流和子存储。该栎谖碼戆沖巋鳧薩锭。2.5 套接字编程简介Socket最早出现在UNIX系统中,它是TCP/IP协议栈向应用程序提供的接口,用于在两个基于TCP/IP协议的应用程序之间相互通信。Scoket相当于一部电话,通过它,可以与网络中的其他计算机相互通信。劇妆诨貰攖苹埘呂仑庙。Windows系统上,套接字用SOCKET进行表示,SOCKET实际是一个指针,指向一个数据结构,微软对SOCKET的底层实现进行了封装。使用WinSock编程时,可以不必了解底层协议,因为所有的API都进行了封装。 臠龍讹驄桠业變墊罗蘄。套接字编程包括客户端的编写和服务端的编写,这里主要介绍windows系统下客户端的编写,客户端的编写主要包括初始化WinSock、创建套接字、建立连接、发送和接收数据。鰻順褛悦漚縫冁屜鸭骞。套接字的编程步骤简单叙述为:首先,调用WSAStartup函数初始化WinSock动态链接库,WSAStartup必须是应用程序调用的第一个WinSock函数,允许应用程序指定要使用的WinSock版本;初始化完成后,调用socket函数创建一个SOCKET套接字,套接字有流式和数据报两种类型,流式采用TCP协议实现,数据报套采用UDP协议实现;套接字创建后,用sockaddr_in填写ip地址和端口号。调用connect函数连接服务器;之后就可以调用recv函数(接收)和send函数(发送)数据了。代码如下所示:穑釓虚绺滟鳗絲懷紓泺。WSADATA wsa_data; WSAStartup(MAKEWORD(2,0), &wsa_data); SOCKET soc = socket(AF_INET, SOCK_STREAM, 0); /创建流失套接字隶誆荧鉴獫纲鴣攣駘賽。struct sockaddr_in serv_addr, serv_addr.sin_family = AF_INET; serv_addr.sin_port = htons(16301);/16301为端口号 serv_addr.sin_addr.s_addr = inet_addr();/为ip地址浹繢腻叢着駕骠構砀湊。int result = connect(soc, (struct sockaddr*)&serv_addr, sizeof(serv_addr);鈀燭罚櫝箋礱颼畢韫粝。if (result = 0)/连接成功char *send_data = hello;result = send(soc, send_data, strlen(send_data), 0);惬執缉蘿绅颀阳灣熗鍵。char recv_buffer20;result = recv(soc, recv_bufer, 20, 0);2.6 Qt开发平台介绍Qt是由奇趣科技开发的C+图形界面开发框架。利用Qt,应用程序可以轻松的做出图形界面,使开发人员可以将主要的精力放在逻辑层的实现上。这里简单介绍Qt的核心机制:信号槽机制。贞廈给鏌綞牵鎮獵鎦龐。信号槽机制是Qt自己定义的通信方式。在生成代码时,使用moc工具生成所需要的附加代码。当某个继承自QObject类的对象需要将自身的状态改变发送出去的时候,就发射一个信号,所有与该信号相连接的槽都会得到调用。并且,信号是可以跨线程发射的。信号槽的使用方式如下:嚌鲭级厨胀鑲铟礦毁蕲。class test: QObject/要使用信号槽机制必须继承QObjectQ_OBJECTsignals:void Change();/声明一个信号,信号只需声明不需要定义private slots:void recv()();/声明一个槽。槽不仅可以接受信号,也可以普通的被调用test:test()/连接一个信号和槽。这里连接Change()信号到_recv()槽上connect(this, SIGNAL(Change(), this, SLOT(_recv();薊镔竖牍熒浹醬籬铃騫。emit Change();/使用emit发送一个信号,相关联的槽(如这里的_recv()将得到调用齡践砚语蜗铸转絹攤濼。void test:recv()/当发送Change信号时,这个函数会得到调用3 系统需求分析为了使系统能够达到预期的目标,良好的发挥作用。需要对系统进行需求分析,需求分析能够有效的减少开发阻力。在需求分析阶段,应画出程序的功能结构图。绅薮疮颧訝标販繯轅赛。3.1 开发背景及目的当今的网络发展已经今非昔比,但由于中国的人口众多,网络访问速率还是一个很严峻的问题。软件技术的发展给提升网络速率带来了福音。网络下载资源是使用网络的基本功能之一,提升下载资源的速率可以很好的改善用户的体验。饪箩狞屬诺釙诬苧径凛。3.2 下载工具应具备的基础功能下载系统的功能主要包括:远程访问、下载管理、配置管理、日志输出。图4 系统功能结构图3.2.1远程访问模块远程访问模块提供了服务器与用户的交互功能。当用户使用下载系统时,首先填写服务器的地址、端口号、登录名和密码。下载系统根据用户填写的地址和端口号向远程服务器发送连接请求。与服务器建立连接后,下载系统根据登录名和密码进行登录验证。当验证成功后,发送命令获取服务器的文件列表信息并将其显示在程序界面上。用户可以查看服务器当前目录下的文件信息、修改当前的工作目录,如:返上一层目录和进入指定目录。烴毙潜籬賢擔視蠶贲粵。3.2.2下载管理模块当用户点击下载按钮下载文件时,下载系统将用户点击的文件名、文件路径和系统参数中的线程分配额度、存储路径、存储文件名发给下载管理模块。下载管理模块首先创建一个复合文档,然后创建一定数量的下载线程。下载线程向服务器发送命令,下载任务分配的数据块,将数据块存储到复合文档的数据流中。下载过程中,实时向用户显示下载的进度、速率、线程数等相关信息。用户可以选择删除或者暂停下载任务。删除下载任务将关闭下载线程并删除复合文档,暂停任务只是关闭下载线程,以后还可以继续开始下载。鋝岂涛軌跃轮莳講嫗键。3.2.3配置管理模块配置管理模块主要用来设置以及存储系统的相关配置参数信息。用户可以设置系统的相关参数,如:线程分配额度和默认存储路径。线程分配额度影响下载文件时使用的下载线程数,用户可以改动这个参数使下载线程的数量增加或减少。默认存储路径是下载文件的默认设置,用户可以更改默认路径。撷伪氢鱧轍幂聹諛詼庞。3.2.4日志输出模块用户操作下载系统时,比如当用户点击连接按钮连接服务器时,下载系统将发送连接请求并将程序的运行信息显示在日志输出栏中。用户可以根据日志输出栏的日志查看当前下载系统的操作已经进行到哪一步。日志输出模块主要输出三种日志:下载系统的FTP命令发送日志、远程服务器的应答日志、系统的错误日志。用户可以根据日志选择接下来的操作。如发现系统连接失败,则用户可以尝试重新连接。踪飯梦掺钓貞绫賁发蘄。3.3 任务分析3.3.1性能要求(1)下载工具应操作简单,符合用户使用习惯;(2)下载工具整体应具有良好的容错性,对于服务器的应答错误及网络异常应有较好的处理机制;(3)下载工具应有具有较高的安全性,防止用户信息的泄漏;(4)下载工具应具有良好的稳定性;(5)下载工具应具有良好的扩展性,可以满足FTP协议的扩展;3.3.2运行环境(1)系统运行的软件环境:Windows系统操作系统。(2)硬件环境:CPU:1GHz以上,内存:128M以上。3.4数据流分析图5 数据流顶层图如图5所示,为顶层数据流图。用户的操作通过FTP下载系统处理后以FTP命令的形式发送给服务器。服务器响应命令并向下载系统发送应答码和资源数据。下载系统对应答码进行解析,对资源进行存储,将结果返回给用户。婭鑠机职銦夾簣軒蚀骞。图6 数据流第一层图如图6所示为数据流第一层图,下载系统主要分为两个部分:远程连接和下载资源。远程连接处理用户与服务器之间的交互操作,如用户的登录,服务器状态信息的获取、文件列表的获取、修改服务器路径等功能。下载资源主要处理用户的下载操作。如用户的新建、删除、暂停、开始等下载任务。譽諶掺铒锭试监鄺儕泻。图7 远程连接细分当用户点击连接按钮时,远程连接模块创建套接字与服务器连接,连接建立后,将需要执行的FTP命令加入到FTP命令管理处,FTP命令管理处依据FTP命令添加的顺序向服务器发送命令请求,接收服务器的应答信息。俦聹执償閏号燴鈿膽賾。图8 下载资源细分当用户新建下载任务时,下载系统将任务请求交给下载模块,下载模块根据用户提供的下载信息和系统的参数信息分配下载线程进行下载。下载线程将命令添加到FTP命令管理处。FTP命令管理处根据FTP命令添加的顺序向服务器发送命令请求,接收服务器的应答信息和数据流,下载模块根据数据流信息生成目标文件,下载完成。缜電怅淺靓蠐浅錒鵬凜。4 系统概要设计4.1 系统逻辑结构本文实现的下载系统采用C/S结构,实现了FTP的客户端部分。下载系统在逻辑上可分为三个层次,表现层、业务逻辑层、命令执行层。系统在逻辑上分层,可以降低系统的耦合度,有利于系统的开发和维护。骥擯帜褸饜兗椏長绛粤。表现层是系统的最上层。负责系统界面的管理,控件的初始化;用户操作的合理性检验,将合理的请求下发给业务逻辑层;显示业务逻辑层的处理结果。癱噴导閽骋艳捣靨骢鍵。业务逻辑层是系统的中间层,是系统的核心部分,负责对用户的操作进行处理。主要分为两个部分,远程交互部分和下载部分。表现层根据用户请求的性质进行区分,将与服务器交互的命令(如:登录、获取服务器状态)发送给远程交互部分,将用户的下载请求发送给下载部分。远程交互部分和下载部分将用户的请求分解为一系列的FTP命令并将这些命令发送给命令执行层执行,最后将处理的结果返回给表现层。鑣鸽夺圆鯢齙慫餞離龐。命令执行层是系统的最下层,负责处理业务逻辑层下发的FTP命令请求,向服务器发送FTP命令,当服务器返回应答信息时,接收并解析服务器的应答信息;当需要下载资源时,也是由命令执行层接收数据,并将数据返回给业务逻辑层。榄阈团皱鹏緦寿驏頦蕴。4.2 系统类图设计程序的主类UML图如图9所示。系统主要分为三大模块,分别为:远程访问模块、下载模块、FTP命令控制模块。远程访问模块的主类为RemoteServer,下载模块的主类为DdController,FTP命令控制模块的主类为RequestCore。界面管理类为AppUI类。逊输吴贝义鲽國鳩犹騸。当用户进行操作时,界面管理类AppUI将操作命令发送给命令分发类CmdController。命令分发类主要完成两个功能:将用户与服务器交互的命令发送给远程访问类RemoteServer处理,将用户下载命令发送给下载管理类DdController处理;保证系统在某一时刻只执行一个命令。幘觇匮骇儺红卤齡镰瀉。远程访问类RemoteServer主要功能是将一系列命令添加到FTP命令控制类RequestCore中。比如,当用户点击登录按钮时,RemoteServer连接远程服务器,连接建立后,RemoteServer往FTP命令控制类中加入USER、PASS、PWD、TYPE 、LIST命令。誦终决懷区馱倆侧澩赜。下载控制类DdController接受用户的新建、删除、暂停、开始下载任务等操作,比如当用户新建一个下载任务时,DdController将创建一定数量的DdThread下载线程,将下载文件分为N个数据块,分发给下载线程下载。下载线程接收到任务后,调用下载套接字DDSocket处理下载任务。DDScoket类根据下载任务,将一些FTP命令添加到FTP命令控制类RequestCore中。医涤侣綃噲睞齒办銩凛。RequestCore命令控制类主要负责管理FTP命令。它将外界需要调用的FTP命令和命令参数保存到队列中,然后以队列顺序依次调用FTP执行类执行命令。舻当为遙头韪鳍哕晕糞。图9 系统类图4.3 系统项目文档结构为了使项目管理方便,系统将相关的实现进行了分类的存放。如图10所示,FormFiles存储了程序的窗口ui文件,HeaderFile和Source Files中存放系统的界面管理类的实现。core中存放程序的逻辑部分。Dowload存放下载相关的代码。Errordefine存放程序的错误定义。Remoteserver存放系统与服务器的交互,request存放FTP的处理类。v2代表实现的第二版本。鸪凑鸛齏嶇烛罵奖选锯。图10 程序项目结构图4.4 系统重用设计本系统使用C+面向对象语言。在面向对象编程中,最重要的概念是代码的复用。在设计系统时,一定要清楚哪些模块是可以抽离出来反复使用的。如果在设计分析时存在没有考虑到的可复用部分,应该重构该部分的代码。这样可以提高代码的内聚,提升系统的健壮性。筧驪鴨栌怀鏇颐嵘悅废。(1)配置信息的存储任何一个应用程序都需要对配置信息进行存储。如程序的运行参数、用户的操作信息等。在一个系统中,可能有很多模块都需要将相关的信息保存到文件中。如本系统中,需要将用户的连接历史记录,程序的配置参数如:默认下载路径、线程分配额度,下载信息保存到文件中。这些需要保存的信息都在程序不同的地方,而这些信息都可以以字符串的形式保存在文件中。韋鋯鯖荣擬滄閡悬贖蘊。AppInfo类是一个保存程序配置信息的类,因为保存信息的需求分散在程序的不同地方,因此该类使用单例模式。该类的实现主要使用Qt的QSetttings类,QSettings是Qt框架中专门用于读写数据的类。它通过key-value的形式对信息进行存储,当系统运行在在windows系统上时,它将信息保存到注册表中。当在IOS上运行时,将信息保存在ini文件中。涛貶騸锬晋铩锩揿宪骟。关键代码如下:AppInfo* AppInfo:GetInstance()static AppInfo appInfo;return &appInfo;AppInfo:AppInfo()m_pSet = new QSettings(./option.ini, QSettings:IniFormat); 钿蘇饌華檻杩鐵样说泻。QString AppInfo:GetStorageValue(QString key)return m_pSet-value(key).toString();void AppInfo:SetStorageValue(QString key, QString value)戧礱風熗浇鄖适泞嚀贗。m_pSet-setValue(key, value);(2)套接字的复用在远程访问和下载资源两个模块中,它们的相同点:需要与服务器建立通信;使用FTP命令进行通信。它们的不同点:日志处理方式不同,在远程访问模块,日志输出到界面的日志栏中,而下载的日志将不进行显示;使用的FTP命令不同,下载资源主要使用FTP的下载命令,需要接收大量的数据,远程访问模块主要是接收服务器的状态信息,接收数据量少。購櫛頁詩燦戶踐澜襯鳳。结合远程访问与下载资源的相同点与异同点,可以将它们的相同点抽离出来,WorkSocket类就是这样的一个类,该类的UML图如图15所示。嗫奐闃頜瑷踯谫瓒兽粪。图11 WorkSocet类的UML图WorkSocket类继承中QTcpSocket类。QTcpSocket是Qt提供的一个实现TCP协议的套接字类。RemoteServer远程访问类和DDSocket下载套接字继承自WorkSocket。虚龉鐮宠確嵝誄祷舻鋸。WorkSocket类的定义如下:class WorkSocket: public QTcpSocketQ_OBJECTpublic:WorkSocket(QObject *parent = nullptr);virtual WorkSocket();virtual void clear();ERESULT Connect(const QString &ip, quint16 port);/连接服务器與顶鍔笋类謾蝾纪黾廢。ERESULT Disconnected();/断开连接bool isRecvRemoteserverInfo();/是否接受到服务器的初始信息private slots:void _read();/读取FTP的数据void _disconnected();/断开连接槽protected:virtual void _defaultHandle();/无指令时的默认处理/派生类必须实现此函数virtual RequestCoreBase *GetRequestCore();virtual void _errorHandle(ERESULT hr);/错误处理virtual void _clearRecvData();/清除接收的数据/命令处理完毕调用此函数virtual void _cmdProcessingCompleted();/发送接受到的数据virtual void _outputResponseLog(const QString &str);結释鏈跄絞塒繭绽綹蕴。/发送错误日志virtual void _outputErrorLog(const QString &str);private:ERESULT _checkRecvStrIntegrity();/检查接受字符完整性protected:QByteArraym_recvStr;private:boolm_bIsFirstRecv;(3)FTP命令实现的设计下载系统的实现基于FTP的RFC959标准,RFC959在1985年10月发布,其在RFC756的基础上更改了一系列文档的错误,增加了几个新的命令。FTP具有扩展性,未来可能增添一系列的新命令。餑诎鉈鲻缥评缯肃鮮驃。为了符合FTP的扩展性,下载系统也应具有扩展性。在实现FTP命令的发送机制时,将耦合度高的FTP命令整合到一个FTP执行类中,如USER命令和PASS命令。PASS命令总是跟在USER命令的后面,因此将二者放在同一个执行类中。爷缆鉅摯騰厕綁荩笺潑。为了便于管理。所有的FTP命令执行类具有统一的接口,但它们并不拥有共同的基类,这样设计可以方便以后扩展。FTP命令执行类由一个FTP命令控制类进行管理,外界并不知道FTP命令执行类的存在。当外界需要执行FTP命令的时候。首先创建一个FTP命令控制类,将相关的命令及命令参数压入其中。然后FTP命令控制类在合适的时机根据FTP命令压入的顺序进行执行。锞炽邐繒萨蝦窦补飙赝。5 系统功能的详细设计和实现5.1 程序界面设计实现下载系统的界面使用Qt的自带工具Qt Designer进行设计,Qt Designer工具提供可视化设计图形界面的能力。用户只需将控件拖入窗口中,依靠窗口布局器调整好控件的位置,点击保存。保存后的文件后缀名为ui,可以用记事本打开该文件,可以看到里面以XML格式存储了相关的控件信息。曠戗輔鑽襉倆瘋诌琿凤。将ui文件添加到项目中,Qt自动为ui文件在命名空间Ui中生成相关的ui类。只需从Qt界面类(如QMainWindow、QDialog)中派生一个子类。在子类中创建一个ui类的实例,并在构造函数中调用ui类的setupui函数关联自己即可。关联后,当该子类的成员函数show被调用时,窗口将会显示出来。当控件被用户操作时,控件会发射相关的信号,如控件点击时将发送clicked()信号,在Qt界面子类中使用Qt的信号槽机制关联控件的信号,信号发射时槽函数将得到调用。下载系统界面管理类AppUI的构造函数代码如下:轉厍蹺佥诎脚濒谘閥糞。AppUI:AppUI(QWidget *parent, Qt:WFlags flags): QMainWindow(parent, flags), m_bIsQuitApp(false)ui.setupUi(this);_init();ui.savePath-setText(AppInfo:GetInstance()-GetCurrentPath();嬷鯀賊沣謁麩溝赉涞锯。connect(ui.login, SIGNAL(clicked(), this, SLOT(_connect();讯鎬謾蝈贺綜枢辄锁廪。connect(ui.download, SIGNAL(clicked(), this, SLOT(_download();兒躉讀闶軒鲧擬钇標藪。connect(ui.serchPah, SIGNAL(clicked(), this, SLOT(_saveas();繅藺詞嗇适篮异铜鑑骠。connect(ui.history, SIGNAL(clicked(), this, SLO

温馨提示

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

评论

0/150

提交评论