基于VC++的大文件传输软件设计
摘要:本文介绍了一种基于VC++的利用Socket进行TCP/IP连接,实现大文件传输的方法。本软件采用多线程思想设计可以使程序开销较小,运行更加流畅。
关键词:Socket;TCP/IP;多线程;大文件
1引言
文件传输软件是一种很常见的软件,但是很多传输软件对要传送的文件的大小有要求,一般最大是4G,当传输的文件大于4G时就无法传输。本文设计的传输软件几乎可以不受文件大小的约束。而且系统开销小,操作简单。
2软件设计
2.1套接字(Socket)
套接字是通信的基石,是支持TCP/IP协议的网络通信单元。可以将套接字看作不同主机间的进程双向通信的终点,它构成了在单个主机内及整个网络间的编程界面。套接字有两种不同的类型:流套接字和数据套接字。流套接字提供双向的、有序的、无重复并且无记录的数据流服务,它适用于处理大量数据。数据套接字支持双向的数据流,但并不保证数据传输的可靠性、有序性和无重复性。因此,根据本文的设计的需要选择流套接字。
2.2客户机/服务器模型
本软件采用的是服务器客户机的模式。一个服务程序通常在一个众所周知的地址监听客户对服务的请求,也就是说,服务进程一直处于休眠状态,知道一个客户对这个服务的地址提出了连接请求。在这个时刻,服务程序被"惊醒"并且为客户提供服务--对客户的请求做出反应。这一请求/响应的过程可以简单地用图1表示。
3软件的编程实现
该软件是在VC++6.0上编程实现的,下面介绍该软件的几个关键部分。
3.1大文件传输的处理
一般传输软件设计的数据类型都是32位的,所以传输文件最大只能是4G。本文将文件大小的数据类型定义为64位,那么传输文件可以到234G,几乎为无穷大。软件的部分代码如下:
unsigned__int64m_FileLength=0;
m_FileLength=m_FileLength+StreamFileInfo.nFileSizeHigh;
m_FileLength=m_FileLength<<32;
m_FileLength=m_FileLength+StreamFileInfo.nFileSizeLow;
其中m_FileLength为无符号的64为类型,存储文件的长度。StreamFileIfo为文件信息结构体类型,其中将文件的大小信息分割成长度为32位的两部分,分别存在StreamFileInfo.nFileSizeHigh和StreamFileInfo.nFileSizeLow里面。
3.2多线程实现
该软件采用两个线程,一个是接收线程UINTReceiveDataThread(LPVOIDlpParam);另一个是发送线程UINTSendDataThread(LPVOIDpParam);当服务器端点击发送按钮后启动发送线程,启动发送线程的函数为:AfxBeginThread((AFX_THREADPROC)SendDataThread,this,THREAD_PRIORITY_NORMAL);
当客户端点击接收按钮后启动接收线程,启动接收线程的函数为:AfxBeginThread(ReceiveDataThread,this,THREAD_PRIORITY_NORMAL);
服务器与客户机的通信流程见图2。
3.3磁盘剩余空间判断
当客户端接收文件的时候首先判断磁盘的剩余空间是否可以满足文件大小的要求,然后再进行传输。获取磁盘信息的函数为:GetDiskFreeSpaceEx(str.Left(3),&lpuse,&lptotal,&lpfree);
其中,str.Left(3)为磁盘的盘符,lpuse为已用空间大小,lptotal为总的空间大小,lpfree为剩余空间大小。最后将lpfree与m_FileLength作比较判断磁盘空间是否满足文件存储的要求。
4总结
本文通过在VC++6.0上编程实现了可以在整个网络传输的功能,传输文件的大小几乎没有限制,服务器可以随时暂停和终止文件的传输,客户端在接收文件的时候可以事先判断磁盘的容量,当磁盘空间不足的时候会出现提示信息。下图为实际生成的软件界面。
[参考文献]
[1]莫海光.用VC++实现的文件传输工具[J].计算机信息技术,2007年第15期.
[2]陈坚,陈伟,等.VisualC++网络高级编程[M].人民邮电出版社,2001年.
期刊库(http://www.zgqkk.com),是一个专门从事期刊推广、投稿辅导的网站。
本站提供如何投稿辅导,寻求投稿辅导合作,快速投稿辅导,投稿辅导格式指导等解决方案:省级投稿辅导/国家级投稿辅导/核心期刊投稿辅导//职称投稿辅导。
【免责声明】本文仅代表作者本人观点,与投稿辅导_期刊发表_中国期刊库专业期刊网站无关。投稿辅导_期刊发表_中国期刊库专业期刊网站站对文中陈述、观点判断保持中立,不对所包含内容的准确性、可靠性或完整性提供任何明示或暗示的保证。请读者仅作参考,并请自行承担全部责任。
投稿辅导服务咨询与期刊合作加盟
陆老师联系QQ:
蒋老师联系QQ:
刘老师联系QQ:
联系电话:18015016272
17327192284
投稿辅导投稿邮箱:zgqkk365@126.com
期刊推荐
- 《校园英语》旬刊 省级 教育类学术期刊
- 《吉林教育》旬刊 省级 教育类学术期刊
- 《文教资料》 旬刊 省级
- 《科技风》半月刊 省级 科技类优秀期刊
- 《价值工程》旬刊 国家级 科技统计源期刊
- 《中国实验方剂学杂志》 半月刊 北大核心
- 《电影评介》半月刊 14版北大核心
- 《社科纵横》季刊 社科类优秀期刊
- 《求索》月刊 14版北大核心期刊
- 《中华建设》月刊 国家级 建设类优秀期刊
- 《继续教育研究》月刊 北大核心期刊
- 《网络空间安全》(信息安全与技术)月刊 国
- 《新闻传播》月刊 省级 新闻类优秀期刊
- 《财会月刊》旬刊 14版北大核心
- 《体育文化导刊》月刊 体育类双核心期刊
- 《机械研究与应用》双月刊 省级 机械应用类
- 《公路交通科技》 月刊 北大核心
- 《教学与管理》旬刊 北大核心
- 《新课程研究》旬刊 省级 教育类优秀学术期
- 《中国医药指南》 旬刊 国家级
- 《高教论坛》 月刊 省级
- 《课程教育研究》 旬刊 国家级
- 《语文建设》 旬刊 14版北大核心
- 《教育发展研究》 半月刊 双核心
- 《学术界》 月刊 双核心


