APP下载

基于多线程文件传输关键技术研究与实现

2016-10-18夏雪刚

电脑知识与技术 2016年21期
关键词:多线程

夏雪刚

"

"

"

摘要:针对网络应用中需要可靠、高效的文件传输问题,通过对多线程技术和断点续传技术的工作原理及实现机制研究分析,引入了C#中类的方法进行程序优化,减少了编程代码,提高了编程和执行效率。通过在C#环境下进行编程仿真分析,实验结果表明创建适当线程数的多线程断点续传技术能有效利用系统资源、提高文件传输的可靠性、高效性等方面有其明显的优势。

关键词:多线程;断点续传;文件传输

中图分类号:TP393 文献标识码:A 文章编号:1009-3044(2016)21-0048-03

很多网络应用软件,需要从服务器下载数据,需要高效的技术提高网络下载速度,提高工作效率,但数据传输过程中因为网络中断、计算机死机重启、掉电而中断文件传输不可避免,为应对这些突发事件,实现用户重新上线时在上一次下载的基础上继续下载文件资源。需要开发高效的多线程下载客户端模块,负责线程的管理,进度的记录等,可以充分利用网络带宽实现文件的快速、稳定、高效传输。多线程网络资源传输技术和断点续传技术是提高资源下载效率的关键技术。

1 多线程下载技术和断点续传技术

1.1 多线程下载基本原理

多线程下载技术是获取到的文件的大小, 根据文件大小将该文件分块, 每个线程负责其中一块文件块的传输工作[1-2]。服务器允许同一个用户与之建立多个连接, 并为每个连接分配一个线程, 客户端通过与服务器建立多个连接可以获得服务器更多的服务时间, 特别是在有其他用户与服务器建立连接的情况下, 利用多线程技术可以在与其他用户在竞争服务器服务时间上更有优势[3]。

1.2 多线程文件客户端传输过程

1)客户端与服务器的连接。

在进行文件传输之前,客户端与服务器必须建立好连接。并构造和发送固定格式的信息头请求,然后等待接收服务器的响应信息,包括重定向,如果失败或成功就退出。

2)客户端取得待下载文件信息。

在发送请求后,获取文件名称,文件存储位置和文件大小等有关信息。

3)客户端创建多个线程,进行文件分块。

取得文件信息后,创建多个线程,按照线程数将文件分割成合适的数据块,确定每个数据块的起点和大小[4]。为每一个文件块分配一个线程,如果有thread个线程传输filesize大小的文件,那么每个线程负责传送filesize/thread个字节,当不能整除时,最后一个线程再负责剩余部分字节,也就是负责filethread +filesize % thread字节数据传输。

4)进行多线程并行下载。

5)各线程文件块下载完成,组合成完整的文件。

多线程文件下载的流程如下图:

1.3 断点续传实现机制

断点续传实质是记录线程上一次下载断开的位置,并在下一次建立连接后直接从上次传输中断的位置继续传输。断点续传的关键问题有两点:

1)传输中断时,记录断点,保存本地的下载信息,需要建立临时文件来保存本地下载信息,多线程下载信息包含各线程已下载字节数,文件的指针和文件的大小等信息[5]。当传输中断时,多个线程断点下载信息会记录在临时文件中,并将文件指针指向已下载文件的末尾。

2)续传,指任务恢复连接后,系统检查本地下载信息,首先判断本地是否存在所下载的文件,如果存在,读取已下载文件的下载信息,系统会根据记录的断点位置,自动将指针定位在未完成线程的断点位置,自动从断点处传输每个线程的剩余部分的数据,这需要在客户端向服务器发送请求。

断点续传实现流程如下图:

2 支持断点续传的多线程程序仿真

这里使用C#实现支持断点续传功能的多线程客户端下载模块开发仿真。在开发过程中用到了C#中的HttpWebRequest和HttpWebResponse类,客户端首先通过HttpWebRequest.Create()创建下载链接,通过GetResponse().ContentLength取得服务器上文件的长度,然后初始多个数组存储各线程状态,文件名、起始和结束位置信息等。然后划分线程,平分数据块,将剩余部分划分到最后一个线程中,定义线程数组,启动接收线程,使用HttpWebResponse的GetResponseStream()方法,从服务器上返回数据流。通过调用自定义函数ReceiveFile()接收和处理每个线程。

使用自定义函数ReceiveFile()处理每个线程下载任务,并实现断点续传。在其中使用System.IO.file类用于典型的文件操作,用于获取和设置文件特性或有关文件创建、访问及写入以及断点续传等操作。先使用System.IO.File.Exists()方法判断下载文件是否存在,如果存在,使用System.IO.File.OpenWrite()方法打开文件,并使用Seek()方法定位断点位置,如果不存在使用System.IO.FileStream(strFile, System.IO.FileMode.Create)创建流文件,然后开始下载线程文件。

3 测试与分析

测试环境:

网络环境:移动铁通宽带

硬件环境:计算机为联想昭阳 K46A inter core i5 M480,内存4G

软件环境:操作系统Windows 7(32位)

软件名:WPS Office 2016个人版 10.1.0.5740

软件大小:54857KB

下载连接:http://crcfj.onlinedown.net/down/W.P.S.5559.20.2422.zip

测试方案:

分别创建5个任务,每个任务线程分别设置为1、3、5、7、9。设计的多线程客户端下载工具下载参数,包括下载用时Tn(秒)、Hn下载速度峰值、下载平均速度1 An、下载平均2 an、瞬时下载速度In-t ,瞬时速度取每个下载任务周期每隔10秒记录一次瞬时速度,文件大小S(KB),Pn表示下载任务,其中所有参数中n表示线程数。

An =S/Tn,an=()/Tn。

在同一下载文件在不同线程下载任务下,统计对比各任务用时,平均速度,速度峰值,并通过线性图直观的显示出。实验结果如下表。

从实验结果及分析看,任务下载快慢依次为:P5>P3>P7>P9>P1。平均速度2 an采用瞬时速度加权求平均,有一定的误差,其与平均速度1虽然算法不同,但从实验数据和线性图走向基本一致,说明本实验合理。单任务下载最慢,线程数为5或3,用时最短,速度最快,但并不是线程越多下载速度越快,随着线程数增加,速度逐渐降低,但仍比单线程任务速度要快。

4 结束语

通过对多线程断点续传技术的研究,从网络下载技术从原理到实现机制再到客户端模块的仿真、测试。多线程文件下载的确可以较大的提升下载的速度。并且通过C#语言类库的应用,减少了编程代码,提高了编程和执行效率。多线程端点续传技术在文件共享、即时通信、协同工作、在线考试系统等方面较为广泛应用。

参考文献:

[1] 王健, 郑伟. 基于Linux 的通用多线程下载工具设计实现[J]. 微计算机信息, 2010(26):74-76.

[2] 贾晓芳. 广播节目传输中的断点续传和多线程技术运用[J]. 无线互联科技, 2016(5):6-7.

[3] 姬涛. 基于P2P 网络的多线程下载技术研究[J]. 电脑开发与应用, 2014(7):18-20.

[4] 高芳. 基于多线程的网络文件传输工具的改进[J]. 数字技术与应用, 2015(4):61-62.

[5] 卞秀运. 基于Java 的多线程下载工具的研究与实现[J]. 信息通信, 2012(3):151-152.

3.1 远程监控系统中硬件安全的考虑

硬件安全是所有计算机设备都应该考虑的问题,但是从软件系统层面来说无法预防,因此需要远程监控系统的实际操作人员注重电磁干扰、设备保护等问题,防止数据损毁与丢失。

3.2 信息传输过程中的安全问题

远程监控系统需要大量的信息传输以保证其正常运转,在信息传输的过程中一定要做好安全方面的有关措施,大部分安全问题也是从这个环节渗透进去的。保障数据的安全传输,需要采取良好的数据加密技术。

数据加密技术即使用各种各样的加密方法对数据加密传输,在客户端以及服务器端的编码解码模块之外独立地进行密码模块的编译。一般常用的数据加密算法都有自己独特的密钥,这个密钥要在服务器端和客户端之内具有同步性,而在其之外则要具有唯一性,而且一个相同的密钥不能使用连续超过一段时间,要根据使用状况和当时的实际情况进行密钥的更换。

另外还要注重总体安全体系在软件构建过程中的地位,一般来说一个完整的安全体系有四个不同的部分:实体安全部分、网络安全部分、管理安全部分和应用安全部分,其中应用安全以及网络安全是安全工作的重点,要在防火墙构筑的过程中对限制访问、安全漏洞排查、实时网络环境监控和数据备份恢复等功能作为安全体系的重点功能进行研发。

4 结语

远程监控系统需要的计算机软件支持需要兼顾便捷性和安全性的特征,因此在软件的研发阶段要从底层架构的决定开始对软件研发进行控制,从而对整体的计算机远程监控系统进行系统层级的优化方案设计。

参考文献:

[1] 汪娟.基于WEB的工业远程监控系统研究与实现[D].武汉理工大学,2008.

[2] 王洪猛.基于Web的远程监控系统开发技术研究[D].武汉大学,2005.

[3] 孟亮.基于软件复用技术的通用远程动力监控系统研究[D].西北工业大学,2006.

[4] 李文鑫.基于Internet的远程实时监控系统研究[D].武汉理工大学,2006.

[5] 罗映冰.基于GPRS技术的计算机远程监控系统的研究与实现[J].中国科技信息,2010(2):96-97.

[6] 孙艳琴.基于虚拟串口和数据库技术的远程监控系统软件设计[D].武汉科技大学,2013.

猜你喜欢

多线程
Java多线程同步机制在网络售票系统中的应用
Java并发工具包对并发编程的优化