多线程断点续传(俗称分段下载)

多线程断点续传(俗称分段下载)

ID:40499354

大小:53.85 KB

页数:23页

时间:2019-08-03

多线程断点续传(俗称分段下载)_第1页
多线程断点续传(俗称分段下载)_第2页
多线程断点续传(俗称分段下载)_第3页
多线程断点续传(俗称分段下载)_第4页
多线程断点续传(俗称分段下载)_第5页
资源描述:

《多线程断点续传(俗称分段下载)》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、一种点对点文件断点续传的多线程实现方法1概述   文件断点续传就是在主机与主机间传输文件时,可以将文件分多次传输,与非断点续传不同的是,每次传输不必传输整个文件。断点续传是大型文件数据传输的核心。本文将以多线程技术和Socket技术为依托,介绍大型文件断点续传的实现方法。   2基本实现思想   多线程断点续传实现的基本思想就是在发送端(也称客户端)将要传输的文件分割为大小相当的多块,用多个线程,将这些块同时向目标服务器端发送;在服务器端的服务程序监听数据传输请求,每当接到新的请求,则创建一个新的

2、线程,与客户端的发送线程对应,接收数据,记录数据传输进程。   图1 点对点文件断点续传过程示意图   图1是点对点文件断点续传第N块传输过程示意图。在传输发起端(客户端),将大型文件事先分割为大小相当的N块,同时创建N个传输线程,连接目标端服务器。当服务器端接收到每一个连接请求后,告知客户端可以传输文件。当客户端接收到可以传输文件的消息时,首先向服务器发送数据传输信息块(包括第几块、在块中的起始位置)请求,当服务器端接收到该请求后,向客户端发送数据传输信息,客户端然后传输数据传输信息块指定的数据

3、给服务器端,服务器端更新数据传输信息块。   3具体实现   在实现过程中我使用了MFC的多线程和Windows的Socket,分客户端和服务器端实现。因为数据传输往往是对等的,所以需要将客户端和服务器端集成在一起,在客户端和服务器端分别实现后,这是件非常简单的工作,只需将它们集成在一起即可。下面将分别介绍客户端和服务器端的实现。   3.1关键数据结构   文件信息数据结构用于在服务器端和客户端之间传递文件第N块的属性信息,详细定义如下:   structfileinfo   {   intfi

4、leno;//文件号   inttype;//消息类别   longlen;//文件(块)长度,在客户端向服务器端发送数据时,是文件长度;   //在服务器端向客户端发送已传部分的信息时,是应该续传部分的长度;   longseek;//开始位置,标识要传输数据在原文件中的起始位置   charname[MAX_PATH_LEN];//文件名   };   发送进度记录结构用户记录文件传输进程,详细定义如下:   structSentInfo   {   longtotle;//已经成功发送数据的

5、长度;   intblock;//块标识;   longfilelen;//文件总长度;   intthreadno;//负责传输第N块数据的线程标识;   CStringname;//文件名称   };   客户端类客户端文件发送实例封装,用户记录客户端文件发送过程中的属性信息、已发送大小、发送线程句柄、发送线程状态、发送统计信息等,具体定义是:   classCClient:publicCObject   {   protected:      //Attributes   public:  

6、 CClient(CStringip);   ~CClient();   SentInfodoinfo;   longm_index;//块索引   BOOLsendOk[BLOCK];//块发送结束状态   CStringSendFileName;   CStringDestIp;//目标IP地址   THREADSTATUSSendStatus;   intGetBlockIndex();//获取当前要传输文件块的序号,例如0,1,2…   CCriticalSectionm_gCS;    

7、  //SendingFileBlockThreadHandles   HANDLEm_thread[BLOCK];//BlockSendingThreadHandlesArray   HANDLEm_ExitThread;//WaitToExitThreadHandle   HANDLEm_ProcessTrackThread;   HANDLEm_hEventKill;//UsercanceledEvent   longm_IdxInListCtrl;//IndexinListView   l

8、ongm_lBeginTimeTick;   longm_lBytesSent;   //Operations   public:   };   3.2客户端   发送线程用于发送由lpparam参数指定的Client对象标识的文件块数据。具体实现是:   //发送线程主函数   //并行进行的线程,针对每个要发送的文件有BLOCK个该线程   DWORDWINAPISendThread(LPVOIDlpparam)   {   CClient*pClient=(CClient*)

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。