FTP多线程工具毕业论文.docx

上传人:sccc 文档编号:4895070 上传时间:2023-05-22 格式:DOCX 页数:47 大小:587.11KB
返回 下载 相关 举报
FTP多线程工具毕业论文.docx_第1页
第1页 / 共47页
FTP多线程工具毕业论文.docx_第2页
第2页 / 共47页
FTP多线程工具毕业论文.docx_第3页
第3页 / 共47页
FTP多线程工具毕业论文.docx_第4页
第4页 / 共47页
FTP多线程工具毕业论文.docx_第5页
第5页 / 共47页
点击查看更多>>
资源描述

《FTP多线程工具毕业论文.docx》由会员分享,可在线阅读,更多相关《FTP多线程工具毕业论文.docx(47页珍藏版)》请在三一办公上搜索。

1、 本 科 生 毕 业 设 计(论 文)论文题目:FTP多线程下载工具作 者 声 明本人以信誉郑重声明:所呈交的学位毕业设计(论文),是本人在指导教师指导下由本人独立撰写完成的,没有剽窃、抄袭、造假等违反道德、学术规范和其他侵权行为。文中引用他人的文献、数据、图件、资料均已明确标注出,不包含他人成果及为获得东华理工大学或其他教育机构的学位或证书而使用过的材料。对本设计(论文)的研究做出重要贡献的个人和集体,均已在文中以明确方式标明。本毕业设计(论文)引起的法律结果完全由本人承担。本毕业设计(论文)成果归东华理工大学所有。特此声明。毕业设计(论文)作者(签字): 签字日期: 年 月 日 本人声明:

2、该学位论文是本人指导学生完成的研究成果,已经审阅过论文的全部内容,并能够保证题目、关键词、摘要部分中英文内容的一致性和准确性。 学位论文指导教师签名: 年 月 日FTP多线程下载工具黄辰Multithread Downloading SystemHuang chen2014年5月13日摘 要随着中国现代互联网行业的飞速发展,网络用户的数量以及用户年龄阶层在不断的扩大。网络需求的增长,刺激着IT技术不断的提升。网络使人与人、人与事之间的交互变得简单高效。对远程资源的访问是网络最基本的功能之一,高效的访问速度,构成了网络如今的蓬勃发展。本文主要对“从远程服务端获取资源”进行了论述,讲解了网络的重要

3、性,以及对人类的生活带来的影响。本文开始介绍了网络下载的基本概念,分析了FTP协议下载的理论及其发展历程。对FTP协议的地址格式、传输模式、连接模式进行了简单的介绍。接下来论述了现代网络下载工具的技术原理及实现,分析了断点续传技术和多线程编程技术对网络下载的影响。本文设计了一个以FTP下载协议为基础、多线程编程为技术手段的FTP多线程下载工具。该系统利用多线程编程技术,模拟多个客户端与远程服务器进行通信,使系统下载速度快。利用复合文档存储下载流,使本地存储速度快,整合率高,易于检查数据完整性。利用面向对象的思维设计程序结构,使程序易于扩展协议内容。文章的最后,给出了部分程序源代码,讲解了设计的

4、思路。关键词: 多线程下载; 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

5、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

6、 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.Th

7、en 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 do

8、wnloading 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 sys

9、tem 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

10、 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绪论11.1 研究意义及目的11.2 研究内容12程序开发的技术基础22.1 FTP协议22.1.1 FTP协议简介22.1.2 FTP的工作原理22.2 多线程技术42.2.1 多线程简介42.2.2 线程的创建42.3 断点续传技术52.3.1 断点续

11、传简介52.3.2 多线程技术与断点续传技术的结合52.4 复合文档52.5 套接字编程简介62.6 Qt开发平台介绍73系统需求分析93.1 开发背景及目的93.2 下载工具应具备的基础功能93.2.1远程访问模块93.2.2下载管理模块103.2.3配置管理模块103.2.4日志输出模块103.3 任务分析103.3.1性能要求103.3.2运行环境113.4数据流分析114系统概要设计144.1 系统逻辑结构144.2 系统类图设计144.3 系统项目文档结构154.4 系统重用设计165系统功能的详细设计和实现205.1 程序界面设计实现205.2 程序返回值的定义215.3 服务器接

12、受请求应答实现225.4 FTP命令的管理与执行的技术实现235.4.1 FTP命令管理的技术实现235.4.2 FTP命令执行的技术实现255.5 下载模块的技术与实现255.5.1 多线程通信的设计实现265.5.2 线程任务分配的设计实现275.5.3 复合文档的使用与合并数据的技术实现295.5.4 下载线程的设计与实现315.5.5 系统退出时下载模块信息保存的技术实现33结论1致 谢1参考文献1东华理工大学毕业设计(论文)系统功能的详细设计和实现41 绪论随着21世纪网络信息时代的到来,网络在人类的生活中已经是不可或缺的一部分。人们在网络上办公、看新闻、听音乐、娱乐、购物等等,上网

13、时间占据了生活的大部分。1.1 研究意义及目的如今,网络用户的数量在不断的增长,网络需求也在不断的扩大,网络负载率在不断的提高。网络的访问速率影响着用户的上网体验,现代网络普遍存在访问速率过慢的现象。在这种情况下,多线程下载工具呼之欲出。用以改善下载资源过慢的状况。在传统的C/S架构中,通过FTP下载文件的步骤为:客户端发送文件获取命令给服务端;服务端响应FTP命令,向客户端传输文件;客户端接收文件数据,下载结束。传统的资源获取方式简单方便,在网络时代刚刚成型的初期,网络用户量并不庞大,这种方式很好的解决了用户获取资源的问题。如今,网络用户数量在不断的增长,导致网络的访问速率过低。为了能更快的

14、获取网络资源,需要在传统的方式上进行改进。1.2 研究内容本文主要研究了网络下载文件的原理及相关的技术实现。系统基于FTP(文件传输协议),采用FTP的RFC959标准,实现了基本的FTP命令。系统结合多线程技术和断点续传技术实现了对文件的并发分块下载,可以有效的提高下载速度。2 程序开发的技术基础2.1 FTP协议2.1.1 FTP协议简介File Transfer Protocol(FTP)翻译为“文件传输协议”,它可以在网络上任意两台计算机之间传输文件,是当前使用广泛的协议之一。FTP协议普遍应用在C/S架构中,可以在控制台命令中手工使用FTP命令,这样可以方便熟悉FTP命令的相关参数及

15、作用。FTP地址格式如下所示:(阅读本文前,读者可以去网络上搜寻相关的FTP内容)ftp:/帐号:密码ip地址(域名):端口号/路径/文件名在上述地址格式中,只有ip地址(域名)参数是必须的,其它的参数都有默认值。在网络中存在许多“匿名”服务器,这类服务器用于向公众提供免费的文件传输服务,此类FTP都有统一的匿名登录帐号:anonymous。2.1.2 FTP的工作原理FTP的传输模式有两种。ASCII传输模式是以ASCII编码传输数据,这种模式主要用来传输文字信息等一系列非二进制格式存储的文件;二进制传输模式是以二进制流传输数据,这种模式主要用来传输以二进制格式存储的文件。FTP的连接模式有

16、两种。主动连接是指客户端主动创建一个数据连接,并将数据连接的地址通过PORT命令发送给服务端,服务端连接到这个端口上。被动连接是指客户端发送PASV命令给服务端,由服务端创建一个数据连接,并将数据地址和端口号发送给客户端,客户端连接到这个端口上。FTP比其他网络协议复杂。通信需要创建两条连接:控制连接和数据连接。控制连接是初始时客户端向服务端发送的连接。控制连接用来发送控制命令,比如:连接建立后,发送命令USER进行登录。登录成功后可以发送LIST命令获取当前的文件列表,发送CWD 命令改变服务器的工作路径等等。数据连接指的是传输文件内容的连接。比如:在控制连接上用户发送LIST命令请求获取服

17、务器的文件列表时,服务器与客户端会通过两种连接模式中的一种协商好数据端口和数据地址,然后建立连接。在这条连接上传输数据。FTP的通信如图1所示:图1 FTP通信图通过FTP,客户端与服务器之间建立一问一答的交互方式。客户端发送FTP命令,命令由小于四个字母的缩写组成,一个命令对应一个任务。按照命令的功能,可以将命令分为:访问控制、传输参数和FTP服务。服务器返回应答信息,每个FTP命令都会有一个以上的应答信息。应答的格式如下: 应答码 空格 文本 CRLF应答信息的开头是应答码,以空格分隔后跟随着描述文本。由于应答码都是字母缩写组成,用户不便于直观阅读,描述文本用来给用户提供相关的描述信息。F

18、TP登录流程图如图2所示:图2 FTP登录流程图2.2 多线程技术2.2.1 多线程简介线程,也称作轻量级的进程。它是一组指令的集合,可以在程序里独立的执行,是操作系统的最小执行单元。多线程编程技术建立在操作系统支持单进程中执行多个线程的能力上。多线程编程技术,使应用程序的效率得到了很好的提升,但也使原本复杂的编程变得更加的繁琐。在以往的单线程编程中,程序的执行,是按照代码顺序执行的,符合人类大脑的思考方式。然而在多线程编程中,多个线程之间采用的是异步执行的方式,线程之间是无序的,同时都在运行。开发人员需要考虑每个线程的运行情况,特别要注意防止死锁的发生。多线程技术的优点:由于多个线程之间是并

19、发执行的,提高了应用程序的运行效率;降低了系统处于闲置状态的时间,提高了系统资源利用率;应用程序可以前后台操作,保证应用程序始终处于可响应状态。多线程技术的缺点:使程序员编码更加复杂,需要考虑一系列多线程独特的问题,如:死锁问题;增加了应用程序的管理开销和操作系统的调度开销。死锁,指的是二个或二个以上的运行线程在争夺有限的系统资源时,造成了一种相互等待的现象。线程死锁发生后,相互等待的线程在没有其他外界的协助下,将永远处于等待状态。多线程编程应仔细的考虑代码是否会造成死锁。2.2.2 线程的创建在默认情况下,一个进程只有一个线程,从主函数main()开始执行。调用CreateThread()函

20、数将创建一个新的线程,函数返回HANDLE句柄(句柄是保存在进程中的一个索引,指向了一个内核数据结构,称为内核对象。如:线程是一个内核对象),新线程的入口由函数的第三个参数指定。在理论情况下,一个进程可以创建任意多的线程。HANDLE CreateThread(LPSECURITY_ATTRIBUTES lpThreadAttributes,/安全属性,使用默认为NULLSIZE_T dwStackSize,/初始堆的大小。0表示使用默认大小LPTHREAD_START_ROUTINE lpStartAddress,/线程函数的指针LPVOID lpParameter,/给线程函数的参数DWO

21、RD dwCreationFlags,/线程标志位LPDWORD lpThreadId/线程Id);图3 多线程并发运行图解2.3 断点续传技术2.3.1 断点续传简介FTP断点续传技术指的是当使用FTP协议上传或下载文件时,程序突然意外的终止或网络突然的中断,导致数据连接断开。重新开始时,下载(上传)将跳过前面已经完成的部分。FTP的断点续传功能依靠FTP命令REST。REST的参数指定了服务器将从哪个位置开始传输资源数据。当然,前提是服务器支持断点续传功能。REST命令的发送如下所示:请求:TYPEI响应:200请求:PASV 响应:227 (数据连接地址和端口号)请求:REST11111

22、(文件传输开始的地址)响应:350 .2.3.2 多线程技术与断点续传技术的结合多线程技术结合断点续传技术指的是用户在上传或下载资源数据时,将需要上传或下载的资源数据划分成N个数据块,创建多个下载线程,每一个下载线程下载不同的数据块,最后将下载完成的数据块拼接起来。2.4 复合文档复合文档是一种COM结构化存储技术。微软的doc格式文档使用的就是复合文档技术。复合文档不仅可以存储文本信息,还可以存储各种其他类型的信息,如:图片信息、声音信息。不仅如此,复合文档还允许多个线程同时在复合文档的不同数据流中读写数据。创建复合文档的函数如下所示: StgCreateDocfile(const WCHA

23、R* pwcsName,/复合文档文件名 DWORD grfMode,/标志位 DWORD reserved, IStorage* ppstgOpen);/创建的复合文档的指针当调用StgCreateDocfile函数创建一个复合文档后,返回的第四个参数称为根存储,利用IStorage根存储的成员函数可以创建数据流。如下所示: HRESULT CreateStream ( Storage * This,/流所在的存储指针 const OLECHAR *pwcsName,/流名字 DWORD grfMode,/标志位 DWORD reserved1, DWORD reserved2, IStre

24、am *ppstm);/返回的流指针创建数据流后,可以调用IStream的成员函数Read和Write读写数据。除了创建数据流,还可以调用它的另一个成员函数CreateStorage(.)创建子存储,子存储又可以创建自己的数据流和子存储。2.5 套接字编程简介Socket最早出现在UNIX系统中,它是TCP/IP协议栈向应用程序提供的接口,用于在两个基于TCP/IP协议的应用程序之间相互通信。Scoket相当于一部电话,通过它,可以与网络中的其他计算机相互通信。Windows系统上,套接字用SOCKET进行表示,SOCKET实际是一个指针,指向一个数据结构,微软对SOCKET的底层实现进行了封

25、装。使用WinSock编程时,可以不必了解底层协议,因为所有的API都进行了封装。 套接字编程包括客户端的编写和服务端的编写,这里主要介绍windows系统下客户端的编写,客户端的编写主要包括初始化WinSock、创建套接字、建立连接、发送和接收数据。套接字的编程步骤简单叙述为:首先,调用WSAStartup函数初始化WinSock动态链接库,WSAStartup必须是应用程序调用的第一个WinSock函数,允许应用程序指定要使用的WinSock版本;初始化完成后,调用socket函数创建一个SOCKET套接字,套接字有流式和数据报两种类型,流式采用TCP协议实现,数据报套采用UDP协议实现;

26、套接字创建后,用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为端

27、口号 serv_addr.sin_addr.s_addr = inet_addr(127.0.0.1);/127.0.0.1为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

28、开发平台介绍Qt是由奇趣科技开发的C+图形界面开发框架。利用Qt,应用程序可以轻松的做出图形界面,使开发人员可以将主要的精力放在逻辑层的实现上。这里简单介绍Qt的核心机制:信号槽机制。信号槽机制是Qt自己定义的通信方式。在生成代码时,使用moc工具生成所需要的附加代码。当某个继承自QObject类的对象需要将自身的状态改变发送出去的时候,就发射一个信号,所有与该信号相连接的槽都会得到调用。并且,信号是可以跨线程发射的。信号槽的使用方式如下:class test: QObject/要使用信号槽机制必须继承QObjectQ_OBJECTsignals:void Change();/声明一个信号,信

29、号只需声明不需要定义private slots:void recv()();/声明一个槽。槽不仅可以接受信号,也可以普通的被调用test:test()/连接一个信号和槽。这里连接Change()信号到_recv()槽上connect(this, SIGNAL(Change(), this, SLOT(_recv();emit Change();/使用emit发送一个信号,相关联的槽(如这里的_recv()将得到调用void test:recv()/当发送Change信号时,这个函数会得到调用3 系统需求分析为了使系统能够达到预期的目标,良好的发挥作用。需要对系统进行需求分析,需求分析能够有效的

30、减少开发阻力。在需求分析阶段,应画出程序的功能结构图。3.1 开发背景及目的当今的网络发展已经今非昔比,但由于中国的人口众多,网络访问速率还是一个很严峻的问题。软件技术的发展给提升网络速率带来了福音。网络下载资源是使用网络的基本功能之一,提升下载资源的速率可以很好的改善用户的体验。3.2 下载工具应具备的基础功能下载系统的功能主要包括:远程访问、下载管理、配置管理、日志输出。图4 系统功能结构图3.2.1远程访问模块远程访问模块提供了服务器与用户的交互功能。当用户使用下载系统时,首先填写服务器的地址、端口号、登录名和密码。下载系统根据用户填写的地址和端口号向远程服务器发送连接请求。与服务器建立

31、连接后,下载系统根据登录名和密码进行登录验证。当验证成功后,发送命令获取服务器的文件列表信息并将其显示在程序界面上。用户可以查看服务器当前目录下的文件信息、修改当前的工作目录,如:返上一层目录和进入指定目录。3.2.2下载管理模块当用户点击下载按钮下载文件时,下载系统将用户点击的文件名、文件路径和系统参数中的线程分配额度、存储路径、存储文件名发给下载管理模块。下载管理模块首先创建一个复合文档,然后创建一定数量的下载线程。下载线程向服务器发送命令,下载任务分配的数据块,将数据块存储到复合文档的数据流中。下载过程中,实时向用户显示下载的进度、速率、线程数等相关信息。用户可以选择删除或者暂停下载任务

32、。删除下载任务将关闭下载线程并删除复合文档,暂停任务只是关闭下载线程,以后还可以继续开始下载。3.2.3配置管理模块配置管理模块主要用来设置以及存储系统的相关配置参数信息。用户可以设置系统的相关参数,如:线程分配额度和默认存储路径。线程分配额度影响下载文件时使用的下载线程数,用户可以改动这个参数使下载线程的数量增加或减少。默认存储路径是下载文件的默认设置,用户可以更改默认路径。3.2.4日志输出模块用户操作下载系统时,比如当用户点击连接按钮连接服务器时,下载系统将发送连接请求并将程序的运行信息显示在日志输出栏中。用户可以根据日志输出栏的日志查看当前下载系统的操作已经进行到哪一步。日志输出模块主

33、要输出三种日志:下载系统的FTP命令发送日志、远程服务器的应答日志、系统的错误日志。用户可以根据日志选择接下来的操作。如发现系统连接失败,则用户可以尝试重新连接。3.3 任务分析3.3.1性能要求(1)下载工具应操作简单,符合用户使用习惯;(2)下载工具整体应具有良好的容错性,对于服务器的应答错误及网络异常应有较好的处理机制;(3)下载工具应有具有较高的安全性,防止用户信息的泄漏;(4)下载工具应具有良好的稳定性;(5)下载工具应具有良好的扩展性,可以满足FTP协议的扩展;3.3.2运行环境(1)系统运行的软件环境:Windows系统操作系统。(2)硬件环境:CPU:1GHz以上,内存:128

34、M以上。3.4数据流分析图5 数据流顶层图如图5所示,为顶层数据流图。用户的操作通过FTP下载系统处理后以FTP命令的形式发送给服务器。服务器响应命令并向下载系统发送应答码和资源数据。下载系统对应答码进行解析,对资源进行存储,将结果返回给用户。图6 数据流第一层图如图6所示为数据流第一层图,下载系统主要分为两个部分:远程连接和下载资源。远程连接处理用户与服务器之间的交互操作,如用户的登录,服务器状态信息的获取、文件列表的获取、修改服务器路径等功能。下载资源主要处理用户的下载操作。如用户的新建、删除、暂停、开始等下载任务。图7 远程连接细分当用户点击连接按钮时,远程连接模块创建套接字与服务器连接

35、,连接建立后,将需要执行的FTP命令加入到FTP命令管理处,FTP命令管理处依据FTP命令添加的顺序向服务器发送命令请求,接收服务器的应答信息。图8 下载资源细分当用户新建下载任务时,下载系统将任务请求交给下载模块,下载模块根据用户提供的下载信息和系统的参数信息分配下载线程进行下载。下载线程将命令添加到FTP命令管理处。FTP命令管理处根据FTP命令添加的顺序向服务器发送命令请求,接收服务器的应答信息和数据流,下载模块根据数据流信息生成目标文件,下载完成。4 系统概要设计4.1 系统逻辑结构本文实现的下载系统采用C/S结构,实现了FTP的客户端部分。下载系统在逻辑上可分为三个层次,表现层、业务

36、逻辑层、命令执行层。系统在逻辑上分层,可以降低系统的耦合度,有利于系统的开发和维护。表现层是系统的最上层。负责系统界面的管理,控件的初始化;用户操作的合理性检验,将合理的请求下发给业务逻辑层;显示业务逻辑层的处理结果。业务逻辑层是系统的中间层,是系统的核心部分,负责对用户的操作进行处理。主要分为两个部分,远程交互部分和下载部分。表现层根据用户请求的性质进行区分,将与服务器交互的命令(如:登录、获取服务器状态)发送给远程交互部分,将用户的下载请求发送给下载部分。远程交互部分和下载部分将用户的请求分解为一系列的FTP命令并将这些命令发送给命令执行层执行,最后将处理的结果返回给表现层。命令执行层是系

37、统的最下层,负责处理业务逻辑层下发的FTP命令请求,向服务器发送FTP命令,当服务器返回应答信息时,接收并解析服务器的应答信息;当需要下载资源时,也是由命令执行层接收数据,并将数据返回给业务逻辑层。4.2 系统类图设计程序的主类UML图如图9所示。系统主要分为三大模块,分别为:远程访问模块、下载模块、FTP命令控制模块。远程访问模块的主类为RemoteServer,下载模块的主类为DdController,FTP命令控制模块的主类为RequestCore。界面管理类为AppUI类。当用户进行操作时,界面管理类AppUI将操作命令发送给命令分发类CmdController。命令分发类主要完成两个

38、功能:将用户与服务器交互的命令发送给远程访问类RemoteServer处理,将用户下载命令发送给下载管理类DdController处理;保证系统在某一时刻只执行一个命令。远程访问类RemoteServer主要功能是将一系列命令添加到FTP命令控制类RequestCore中。比如,当用户点击登录按钮时,RemoteServer连接远程服务器,连接建立后,RemoteServer往FTP命令控制类中加入USER、PASS、PWD、TYPE 、LIST命令。下载控制类DdController接受用户的新建、删除、暂停、开始下载任务等操作,比如当用户新建一个下载任务时,DdController将创建一

39、定数量的DdThread下载线程,将下载文件分为N个数据块,分发给下载线程下载。下载线程接收到任务后,调用下载套接字DDSocket处理下载任务。DDScoket类根据下载任务,将一些FTP命令添加到FTP命令控制类RequestCore中。RequestCore命令控制类主要负责管理FTP命令。它将外界需要调用的FTP命令和命令参数保存到队列中,然后以队列顺序依次调用FTP执行类执行命令。图9 系统类图4.3 系统项目文档结构为了使项目管理方便,系统将相关的实现进行了分类的存放。如图10所示,FormFiles存储了程序的窗口ui文件,HeaderFile和Source Files中存放系统

40、的界面管理类的实现。core中存放程序的逻辑部分。Dowload存放下载相关的代码。Errordefine存放程序的错误定义。Remoteserver存放系统与服务器的交互,request存放FTP的处理类。v2代表实现的第二版本。图10 程序项目结构图4.4 系统重用设计本系统使用C+面向对象语言。在面向对象编程中,最重要的概念是代码的复用。在设计系统时,一定要清楚哪些模块是可以抽离出来反复使用的。如果在设计分析时存在没有考虑到的可复用部分,应该重构该部分的代码。这样可以提高代码的内聚,提升系统的健壮性。(1)配置信息的存储任何一个应用程序都需要对配置信息进行存储。如程序的运行参数、用户的操

41、作信息等。在一个系统中,可能有很多模块都需要将相关的信息保存到文件中。如本系统中,需要将用户的连接历史记录,程序的配置参数如:默认下载路径、线程分配额度,下载信息保存到文件中。这些需要保存的信息都在程序不同的地方,而这些信息都可以以字符串的形式保存在文件中。AppInfo类是一个保存程序配置信息的类,因为保存信息的需求分散在程序的不同地方,因此该类使用单例模式。该类的实现主要使用Qt的QSetttings类,QSettings是Qt框架中专门用于读写数据的类。它通过key-value的形式对信息进行存储,当系统运行在在windows系统上时,它将信息保存到注册表中。当在IOS上运行时,将信息保

42、存在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_p

43、Set-setValue(key, value);(2)套接字的复用在远程访问和下载资源两个模块中,它们的相同点:需要与服务器建立通信;使用FTP命令进行通信。它们的不同点:日志处理方式不同,在远程访问模块,日志输出到界面的日志栏中,而下载的日志将不进行显示;使用的FTP命令不同,下载资源主要使用FTP的下载命令,需要接收大量的数据,远程访问模块主要是接收服务器的状态信息,接收数据量少。结合远程访问与下载资源的相同点与异同点,可以将它们的相同点抽离出来,WorkSocket类就是这样的一个类,该类的UML图如图15所示。图11 WorkSocet类的UML图WorkSocket类继承中QTcp

44、Socket类。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 Discon

45、nected();/断开连接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)FT

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号