下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、2011 年 8 月第 8 期电子测试electronic testaug.2011no.8104基于 socket 的多线程下载工具的开发周学威,闫鑫,赵榉云,杨薇 (中北大学 仪器科学与动态测试教育部重点实验室,山西 太原 030051 )摘要: 在 windows 编程中,为了提高代码的时、空效率,广泛采取多线程技术。本文以多线程技术的应用为研究背景,实现了多线程的一个应用: 多线程文件下载。该下载工具以vc+6.0为开发平台,利用windows 套接字函数进行网络编程,实现了基于http 协议的文件下载过程,并通过创建和编写线程函数实现了文件的多线程下载工具的开发。利用该下载工具可以对
2、网上的文档、图片、歌曲等各种文件实现多线程下载。经测试表明,该下载工具使文件的下载速率得到了有效提高。关键词: 多线程;http协议; windows 套接字函数中图分类号: tn915.85 文献标识码: adevelopment of multi-thread downlodeing tool based on socketzhou xuewei, yan xin, zhao juyun, yang wei(key laboratory of instrumentation science & dynamic measurement (north university of chi
3、na), ministry of education, taiyuan 030051, china)abstract : in order to improve codes efficiency both in time and space, multi-thread technology widely used on windows programs. this thesiss background was the apply of the multithreading technology, realize an application of multithreading technolo
4、gy: the multi-thread download file . this tool used vc+6.0 as the development space and windows socket function to finish the process, realizing the file download based on hyper text transfer protocal, and by creating and writing thread function realize the file multi-thread downloading tools develo
5、pment.to avail these multithreading download instrument could download the different kinds of file by multithreading in net, such as the documents 、pictures、songs and so on .the test shows that the download tools make file download speed effectively improved.keywords : multi-thread; hyper text trans
6、fer protocal; windows socket function0 引言多线程就是允许单个程序创建多个并行执行的线程来完成各自的任务,它在多任务和实时处理等方面具有重要意义,特别是在网络应用程序中,可以提高带宽利用率和程序反应速度1。为了达到下载大型网站的目的, 在编写离线浏览软件的过程中,需要下载大量的web 文件,其中一个技术要点就是多线程下载问题。是否具有“多线程下载”技术、甚至能支持多少个下载线程都成了人们评测下载软件的要素2。本文以 socket 技术为依托,基于vc+6.0环境,采用http 协议,通过编写客户端应用程序,对文件的多线程下载进行了设计与实现。1 设计思路多
7、线程下载的前提是网络的连通和通信软件与协议应用技巧与实践1052011.8的应用。下载文件的过程是客户端与服务器的交互的过程,在下载过程中采用的传送文件的协议有多种,本程序的设计采用了 http 协议3。http 即超文本传输协议,当客户端与服务器建立一个 tcp 连接后,客户端就可以发送请求并读取服务器的消息响应。在网络通信环境下,socket作为应用程序和网络之间的标准接口,可以看成在两个程序进行通讯连接中的一个端点,是连接应用程序和网络驱动程序的桥梁4。mfc 是 vc 编程环境最重要的组成部分,它为用户提供了一大批预先定义的类和成员函数,封装了大量的windows api5。为了简化套
8、接字网络编程,更方便的利用windows 系统的消息驱动机制,充分利用mfc 的优势,本设计采用基于 mfc 对话框的架构。由于本设计基于http 协议,采用 mfc winsock 中的csocket套接字类进行编程,由客户端直接发送请求到服务器端进行资源的下载,因此只需编写客户端网络应用程序6。首先,根据http 协议,构造请求消息头,向web服务器发送资源下载请求,当服务器返回请求成功后,再分别为每个线程构造下载请求,通过csocket编程向服务器传输请求,实现各个线程的下载;然后,启动线程函数,包括四个下载线程用以实现多线程下载和一个监听线程来实时记录下载状态;最后当各个下载线程都结束
9、时,进行文件合并,同时删除临时文件以完成下载任务7。2 具体实现及主要函数2.1 函数实现过程实现过程可概括为:利用 socket套接字发送消息,在发送的消息中要构造请求消息字段,用http 协议向服务器发送下载请求,通过服务器的返回指令,实现资源下载,并通过启动线程函数来加入多线程技术,从而实现数据的多线程下载。其函数调用过程如图1所示。要实现下载,必须由客户端向服务器发送请求消息,这是 http 的核心。如图1 所示,开始下载后,首先要获得要下载文件的url,接着调用parseurl函数判断要下载文件的 url 是否合理,若合理,则会由sendrequest() 函数向主线程发送http
10、请求消息,在调用getinfo 函数获取http 服务器成功响应的消息后,会为每个下载线程分配要下载的字节数。这样,开始下载任务成功实现后,会调用 cdownloaddlg 类中的 createthread() 函数中,创建线程,downloadthread (lpvoid lpparam)是新建线程的入口函数,threadfunc(index)函数主要进行下载过程中每个子线程的套接字编程,通过编写向服务器发送请求消息的标题字段的代码,利用 http 协议的下载原理实现每个子线程的下载。2.2 主要函数说明( 1)创建下载线程,指向downloadthread()这个线程函数的入口 :m_ht
11、hreadi=:createthread(null, 0, downloadthread, (lpvoid)&http, 0, &dwthread);( 2)创建监听线程,指向监听线程 notify() 函数的入口,用以对各线程的下载状态和进度进行监听:m_hnotify=:createthread(null,0,notify,(lpvoid)this,0,&dwnotify); ( 3) downloadthread() 函数 :dword winapi downloadthread(lpvoid lpparam); 该函数会通过公有的继承方式继承threadfunc
12、(index)函数, threadfunc(index) 函数实现的主要功能是 :每个子线程向服务器发送http 请求消息,实现每个子线程下载任务的完成。( 4) notify()函数dword winapi notify(lpvoid lpparam);该函数中,会通过公有的继承方式继承在类cdownloaddlg 中的finish() 函数,判断每个子线程是否完成下载,并进行下载文件的保存。 ( 5) threadfunc() 函数在 threadfunc函数中,先要创建客户端的套接字对象,图1 多线程下载的函数调用过程消息响应函数 onstart()parseurl(cstring st
13、r)sendrequest(bool bhead=false)getinfo(lpctstr lpsaheader, dword &dwcontenlength,ctime & timelastmodified)createthread()notify(lpvoid lpparam)finish()threadfunc(index)downloadthread(lpvoid lpparam)skill & practice1062011.8对每个要下载的子线程,设置了http 会话中的请求消息字段,通过由客户端向服务器发送请求消息实现每个子线程的下载。对于多线程下载,在
14、请求消息的标题字段增加了 range,用于请求服务器返回指定大小的字段,其大小采用了数据分片技术来确定8。编写的语句为strrange.format(range: bytes=%d-%drn, m_state.range2 * index, m_state.range2 * index + 1), 其中 index是线程的序列号。3 系统运行程序设计完成后,编译并运行,在生成对话框后,选择要下载文件的url,将其直接拖入getlist 列表控件中,点击开始按钮,开始下载。下载过程如图2 所示,可见4个线程同步运行,实现了4 个线程下载同一文件的多线程下载 ;下载完成时,弹出提示窗口提示“多线程
15、下载完成”,如图 3 所示。此时单击提示窗口中的“确定”按钮, 4 个 .jpg临时文件将合并成一个jpeg图像,至此便完成了多线程文件的下载。 图2 正在下载界面 图3 下载完成界面4 结束语本文对多线程数据传输进行了详细分析和总体设计,对多线程下载的原理、具体实现和应用进行了探讨,采用了面向对象的设计方法,应用多线程技术,通过windows套接字函数,直接向web 服务器发送请求,用vc+6.0 mfc 中的 csocket类编写客户端程序,实现了基于超文本传输协议 http 的文件下载,通过创建和编写线程函数实现了多线程传输,经测试,下载速度有一定的改善。参考文献1 郑阿奇.visual c+ 实用教程m.3 版 . 北京 : 电子工业出版社,2008.2 毛光喜 . 多线程下载工具的开发与应用j. 计算机应用与软件,2006,23(7):136-138.3 charles wright. visualc+程序员使用大全m. 邓劲生 , 张晓明 译 .北京 : 中国水利水电出版社,2001.4 蒋东兴.windowssockets 网络程序设计大全m. 北京 : 清华大学出版
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 地方公务员西藏申论33
- 地方公务员广东申论137
- 地方公务员云南申论123
- 2013年5月24日广东珠海乡镇公务员面试题
- 2024届中考数学一次方程(组)天天练(10)及答案
- 2015年6月27日上午福建省公务员面试真题
- 广东公务员面试模拟15
- 四川申论真题2022年上半年(县乡卷)
- 四川省申论模拟91
- 2024年施工资料合同1000字
- 教育机构线上教育平台建设方案
- 初中七年级上册综合实践活动 修补自行车内胎 教学设计
- 五年级语文上册第四单元综合素质达标作业
- 2024年高考政治考试题海南卷及参考答案
- UNIT 2 Were Family!教学设计 2024-2025学年人教版英语七年级上册
- 幼儿园小班幼儿园小班社会《小熊你好》课件
- 2024年电工作业高压电工操作证考试模拟试题库及答案(共180题)
- 2024年营养指导员理论知识考试题库及答案
- 英语冠词讲解
- 2024年贵州省贵阳市中考生物试题(含答案逐题解析)
- 2024-2030年中国浓缩果汁市场深度调查研究报告
评论
0/150
提交评论