ftp多线程下载工具.docx
- 文档编号:16797798
- 上传时间:2023-07-17
- 格式:DOCX
- 页数:47
- 大小:513.69KB
ftp多线程下载工具.docx
《ftp多线程下载工具.docx》由会员分享,可在线阅读,更多相关《ftp多线程下载工具.docx(47页珍藏版)》请在冰点文库上搜索。
ftp多线程下载工具
本科生毕业设计(论文)
论文题目
:
FTP多线程下载工具
姓名
:
黄辰
学号
:
1021111221
班级
:
10211112班
年级
:
2010级
专业
:
软件工程
学院
:
软件学院
指导教师
:
张军(副教授)
完成时间
:
2014年5月13日
作者声明
本人以信誉郑重声明:
所呈交的学位毕业设计(论文),是本人在指导教师指导下由本人独立撰写完成的,没有剽窃、抄袭、造假等违反道德、学术规范和其他侵权行为。
文中引用他人的文献、数据、图件、资料均已明确标注出,不包含他人成果及为获得东华理工大学或其他教育机构的学位或证书而使用过的材料。
对本设计(论文)的研究做出重要贡献的个人和集体,均已在文中以明确方式标明。
本毕业设计(论文)引起的法律结果完全由本人承担。
本毕业设计(论文)成果归东华理工大学所有。
特此声明。
毕业设计(论文)作者(签字):
签字日期:
年月日
本人声明:
该学位论文是本人指导学生完成的研究成果,已经审阅过论文的全部内容,并能够保证题目、关键词、摘要部分中英文内容的一致性和准确性。
学位论文指导教师签名:
年月日
FTP多线程下载工具
黄辰
MultithreadDownloadingSystem
Huangchen
2014年5月13日
摘要
随着中国现代互联网行业的飞速发展,网络用户的数量以及用户年龄阶层在不断的扩大。
网络需求的增长,刺激着IT技术不断的提升。
网络使人与人、人与事之间的交互变得简单高效。
对远程资源的访问是网络最基本的功能之一,高效的访问速度,构成了网络如今的蓬勃发展。
本文主要对“从远程服务端获取资源”进行了论述,讲解了网络的重要性,以及对人类的生活带来的影响。
本文开始介绍了网络下载的基本概念,分析了FTP协议下载的理论及其发展历程。
对FTP协议的地址格式、传输模式、连接模式进行了简单的介绍。
接下来论述了现代网络下载工具的技术原理及实现,分析了断点续传技术和多线程编程技术对网络下载的影响。
本文设计了一个以FTP下载协议为基础、多线程编程为技术手段的FTP多线程下载工具。
该系统利用多线程编程技术,模拟多个客户端与远程服务器进行通信,使系统下载速度快。
利用复合文档存储下载流,使本地存储速度快,整合率高,易于检查数据完整性。
利用面向对象的思维设计程序结构,使程序易于扩展协议内容。
文章的最后,给出了部分程序源代码,讲解了设计的思路。
关键词:
多线程下载;FTP;断点续传;
Abstract
WiththerapiddevelopmentofmodernInternetindustryinChina,thenumberofnetworkusersaswellastheageisconstantlyexpanding.Thegrowthofnetworkdemands,continuouslystimulatethepromotionofITtechnology.
Internetenabletheinteractionamongpeopleandobjectsbecomeseasierandmoreefficient.Theaccesstoremotenetworkresourcesisoneofthebasicfunctionsofnetwork,andrapidspeedofaccessformstheprosperityofnetwork.Thisarticleexpressedthethemeof"gettheresourcesfromaremoteserver",Andalsoexplainedtheimportanceofthenetwork,andtheimpactonhumanbeing’slife.Firstly,thisarticlepresentedthebasicconceptsofdownload,analyzedthetheoryofFTPprotocolaswellastheprocessofdevelopment.Andalsosimplyintroducedaddressformat,transmissionmodeaswellastheconnectionmodeofFTPprotocol.Thenitdiscussedthetechnology,principleandimplementationofnetworkdownloadtoolsinnowadays,AndalsoanalyzetheimpactofHTTPtechnologyaswellasthemulti-threadedprogrammingtechniquesonthedownloadsfromthenetwork.
Finally,thearticleintroducedthedesignofthemulti-threadeddownloadingtoolthatbasedonFTPprotocolandtakenmulti-threadedprogramastechnicalmeans.Thesystemmakedtheusesofmulti-threadedprogrammingtechniquestosimulatemultipleclientstocommunicatewitharemoteserver.Thistechnologymakesthedownloadingspeedofthesystemfaster.Thissystemusesthecompositedocumenttostoragedownloadingstream,thatmakesspeedofstoragefaster,promotestheefficiencyofintegration,andchecksintegrityofdataeasier.Inthisprogram,Usingtheobject-orientedmethodtodeveloptheconstructionoftheprogram,maketheprogrameasytoextendtheprotocol.Intheendofthearticle,itpresentssomesourcecodes,analysesthecogitationofthedesign.
Keywords:
Multi-threadedDownload;FTP;BreakpointResume;
1绪论
随着21世纪网络信息时代的到来,网络在人类的生活中已经是不可或缺的一部分。
人们在网络上办公、看新闻、听音乐、娱乐、购物等等,上网时间占据了生活的大部分。
1.1研究意义及目的
如今,网络用户的数量在不断的增长,网络需求也在不断的扩大,网络负载率在不断的提高。
网络的访问速率影响着用户的上网体验,现代网络普遍存在访问速率过慢的现象。
在这种情况下,多线程下载工具呼之欲出。
用以改善下载资源过慢的状况。
在传统的C/S架构中,通过FTP下载文件的步骤为:
客户端发送文件获取命令给服务端;服务端响应FTP命令,向客户端传输文件;客户端接收文件数据,下载结束。
传统的资源获取方式简单方便,在网络时代刚刚成型的初期,网络用户量并不庞大,这种方式很好的解决了用户获取资源的问题。
如今,网络用户数量在不断的增长,导致网络的访问速率过低。
为了能更快的获取网络资源,需要在传统的方式上进行改进。
1.2研究内容
本文主要研究了网络下载文件的原理及相关的技术实现。
系统基于FTP(文件传输协议),采用FTP的RFC959标准,实现了基本的FTP命令。
系统结合多线程技术和断点续传技术实现了对文件的并发分块下载,可以有效的提高下载速度。
2
程序开发的技术基础
2.1FTP协议
2.1.1FTP协议简介
FileTransferProtocol(FTP)翻译为“文件传输协议”,它可以在网络上任意两台计算机之间传输文件,是当前使用广泛的协议之一。
FTP协议普遍应用在C/S架构中,可以在控制台命令中手工使用FTP命令,这样可以方便熟悉FTP命令的相关参数及作用。
FTP地址格式如下所示:
(阅读本文前,读者可以去网络上搜寻相关的FTP内容)
ftp:
//帐号:
密码@ip地址(域名):
端口号/路径/文件名
在上述地址格式中,只有ip地址(域名)参数是必须的,其它的参数都有默认值。
在网络中存在许多“匿名”服务器,这类服务器用于向公众提供免费的文件传输服务,此类FTP都有统一的匿名登录帐号:
anonymous。
2.1.2FTP的工作原理
FTP的传输模式有两种。
ASCII传输模式是以ASCII编码传输数据,这种模式主要用来传输文字信息等一系列非二进制格式存储的文件;二进制传输模式是以二进制流传输数据,这种模式主要用来传输以二进制格式存储的文件。
FTP的连接模式有两种。
主动连接是指客户端主动创建一个数据连接,并将数据连接的地址通过PORT命令发送给服务端,服务端连接到这个端口上。
被动连接是指客户端发送PASV命令给服务端,由服务端创建一个数据连接,并将数据地址和端口号发送给客户端,客户端连接到这个端口上。
FTP比其他网络协议复杂。
通信需要创建两条连接:
控制连接和数据连接。
控制连接是初始时客户端向服务端发送的连接。
控制连接用来发送控制命令,比如:
连接建立后,发送命令USER进行登录。
登录成功后可以发送LIST命令获取当前的文件列表,发送CWD命令改变服务器的工作路径等等。
数据连接指的是传输文件内容的连接。
比如:
在控制连接上用户发送LIST命令请求获取服务器的文件列表时,服务器与客户端会通过两种连接模式中的一种协商好数据端口和数据地址,然后建立连接。
在这条连接上传输数据。
FTP的通信如图1所示:
图1FTP通信图
通过FTP,客户端与服务器之间建立一问一答的交互方式。
客户端发送FTP命令,命令由小于四个字母的缩写组成,一个命令对应一个任务。
按照命令的功能,可以将命令分为:
访问控制、传输参数和FTP服务。
服务器返回应答信息,每个FTP命令都会有一个以上的应答信息。
应答的格式如下:
应答码空格文本CRLF
应答信息的开头是应答码,以空格分隔后跟随着描述文本。
由于应答码都是字母缩写组成,用户不便于直观阅读,描述文本用来给用户提供相关的描述信息。
FTP登录流程图如图2所示:
图2FTP登录流程图
2.2多线程技术
2.2.1多线程简介
线程,也称作轻量级的进程。
它是一组指令的集合,可以在程序里独立的执行,是操作系统的最小执行单元。
多线程编程技术建立在操作系统支持单进程中执行多个线程的能力上。
多线程编程技术,使应用程序的效率得到了很好的提升,但也使原本复杂的编程变得更加的繁琐。
在以往的单线程编程中,程序的执行,是按照代码顺序执行的,符合人类大脑的思考方式。
然而在多线程编程中,多个线程之间采用的是异步执行的方式,线程之间是无序的,同时都在运行。
开发人员需要考虑每个线程的运行情况,特别要注意防止死锁的发生。
多线程技术的优点:
由于多个线程之间是并发执行的,提高了应用程序的运行效率;降低了系统处于闲置状态的时间,提高了系统资源利用率;应用程序可以前后台操作,保证应用程序始终处于可响应状态。
多线程技术的缺点:
使程序员编码更加复杂,需要考虑一系列多线程独特的问题,如:
死锁问题;增加了应用程序的管理开销和操作系统的调度开销。
死锁,指的是二个或二个以上的运行线程在争夺有限的系统资源时,造成了一种相互等待的现象。
线程死锁发生后,相互等待的线程在没有其他外界的协助下,将永远处于等待状态。
多线程编程应仔细的考虑代码是否会造成死锁。
2.2.2线程的创建
在默认情况下,一个进程只有一个线程,从主函数main()开始执行。
调用CreateThread()函数将创建一个新的线程,函数返回HANDLE句柄(句柄是保存在进程中的一个索引,指向了一个内核数据结构,称为内核对象。
如:
线程是一个内核对象),新线程的入口由函数的第三个参数指定。
在理论情况下,一个进程可以创建任意多的线程。
HANDLECreateThread(
LPSECURITY_ATTRIBUTESlpThreadAttributes,//安全属性,使用默认为NULL
SIZE_TdwStackSize,//初始堆的大小。
0表示使用默认大小
LPTHREAD_START_ROUTINElpStartAddress,//线程函数的指针
LPVOIDlpParameter,//给线程函数的参数
DWORDdwCreationFlags,//线程标志位
LPDWORDlpThreadId//线程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(constWCHAR*pwcsName,//复合文档文件名
DWORDgrfMode,//标志位
DWORDreserved,
IStorage**ppstgOpen);//创建的复合文档的指针
当调用StgCreateDocfile函数创建一个复合文档后,返回的第四个参数称为根存储,利用IStorage根存储的成员函数可以创建数据流。
如下所示:
HRESULTCreateStream(
Storage*This,//流所在的存储指针
constOLECHAR*pwcsName,//流名字
DWORDgrfMode,//标志位
DWORDreserved1,
DWORDreserved2,
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函数(发送)数据了。
代码如下所示:
WSADATAwsa_data;
WSAStartup(MAKEWORD(2,0),&wsa_data);
SOCKETsoc=socket(AF_INET,SOCK_STREAM,0);//创建流失套接字
structsockaddr_inserv_addr,
serv_addr.sin_family=AF_INET;
serv_addr.sin_port=htons(16301);//16301为端口号
serv_addr.sin_addr.s_addr=inet_addr("127.0.0.1");//127.0.0.1为ip地址
intresult=connect(soc,(structsockaddr*)&serv_addr,sizeof(serv_addr));
if(result==0)//连接成功
{
char*send_data="hello";
result=send(soc,send_data,strlen(send_data),0);
charrecv_buffer[20];
result=recv(soc,recv_bufer,20,0);
}
2.6Qt开发平台介绍
Qt是由奇趣科技开发的C++图形界面开发框架。
利用Qt,应用程序可以轻松的做出图形界面,使开发人员可以将主要的精力放在逻辑层的实现上。
这里简单介绍Qt的核心机制:
信号——槽机制。
信号——槽机制是Qt自己定义的通信方式。
在生成代码时,使用moc工具生成所需要的附加代码。
当某个继承自QObject类的对象需要将自身的状态改变发送出去的时候,就发射一个信号,所有与该信号相连接的槽都会得到调用。
并且,信号是可以跨线程发射的。
信号—槽的使用方式如下:
classtest
:
QObject//要使用信号槽机制必须继承QObject
{
Q_OBJECT
signals:
voidChange();//声明一个信号,信号只需声明不需要定义
privateslots:
voidrecv()();//声明一个槽。
槽不仅可以接受信号,也可以普通的被调用
}
test:
:
test()
{
//连接一个信号和槽。
这里连接Change()信号到_recv()槽上
connect(this,SIGNAL(Change()),this,SLOT(_recv()));
emitChange();//使用emit发送一个信号,相关联的槽(如这里的_recv())将得到调用
}
voidtest:
:
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命令的形式发送给服务器。
服务器响应命令并向
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ftp 多线程 下载工具