- 1、本文档共26页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
文件传输 授课教师: 导入 在电子教室软件系统中,教师经常需要通过教师机向所有学生下发文件,传递授课资料,有时也需要学生将完成的作业上传到教师机,这就涉及到一个文件传输的问题,本章我们就通过一个简单的文件传输程序。 本章要点 文件传输功能分析设计 文件操作编程技术 多线程编程技术 文件下发程序实现 功能需求分析 包含两个程序,一个发送端程序,一个接收端程序。 发送端程序可以由用户选择要发送的文件。 发送端程序可以指定发送对象,可以是一个IP范围,也可以是某个IP地址。 接收端程序可以由用户指定接收到的文件的存放地址。 界面设计 关键技术分析 文件传输的本质用一句话概括就是:发送方将文件数据读出来,然后调用套接字的发送函数将数据传输到接收方,接收方调用套接字接收函数接收数据,然后重新建立文件并将数据写入文件。 文件传输流程 发送文件功能的实现 接收文件功能的实现流程 代码详解——文件操作 CFile类: CFile类是MFC文件类的基类,提供非缓冲方式的二进制磁盘输入、输出功能;并直接通过派生类来支持文本文件和内存文件。提供访问本地文件内容的功能,不支持访问网络文件的功能。 使用CFile操作文件的基本过程是: 定义CFile对象—〉打开要操作的文件 —〉对文件/写文件—〉关闭文件 文件操作——Open()函数 该函数的功能是打开指定文件。 BOOL CFile::Open(LPCTSTR lpszFileName, UINT nOpenFlags, CFileException* pException) 参数lpszFileName:带完整路径的文件名,指定要打开的文件。 参数nOpenFlags:指定文件打开方式,可以是多个标志的组合。 文件操作——Read()函数 该函数的功能是从文件中读取文件内容。 virtual UINT CFile::Read( void* lpBuf, UINT nCount ); 参数lpBuf:存放读出的文件内容的空间地址。 参数nCount:从文件读出的最大字节数。 文件操作—— Write()函数 该函数的功能是向文件中写数据 virtual void Write( const void* lpBuf, UINT nCount ); 参数lpBuf:存储要写入文件的数据的空间地址。 参数nCount:要写入文件的数据的字节数。 文件操作—— Close()函数 功能是关闭文件句柄。 文件操作完毕必须调用Close()函数关闭文件。 第一步程序扩展——实现较大文件的传输 上面文件传输实例的功能并不强大,但是它的实现过程很简单,说明了文件传输的原理。 它忽略了真实文件的大小——在上面的代码中,为了从文件中读取数据,首先获得文件长度,然后开辟一段和文件长度匹配的内存作为文件缓冲。但现在很多文件动辄几百兆字节,往往无法一次开辟如此大的内存容纳如此多的数据。所以对于大文件传输,这段代码显然不合适。 解决方法:分段缓冲文件数据。 实现方法详见代码 第二步程序扩展——同时向多个目标传输文件 教师机通常需要控制整个教室所有的学生机,需要进行一对多的文件传输 需要用户在界面上指出需要发送文件的对象(例如学生机的IP地址范围) 考虑传输效率,需要采用多线程技术。 什么是多线程技术? 多线程是为了同步完成多项任务 多线程不是为了提高运行效率,而是为了通过提高资源使用效率来提高系统的效率。 线程是一组指令的集合,或者是程序的特殊段,它可以在程序里独立执行,也可以把它理解为代码运行的上下文。 线程负责在单个程序里执行多任务。通常由操作系统负责多个线程的调度和执行。 实现发送文件功能的主线程流程 多线程实现代码 在本程序中,多线程编程涉及三处代码,第一处是创建一个新线程,使用CreateThread函数: CreateThread(NULL,0,SendFileThread,(LPVOID)pMeg,NULL,NULL); 函数CreateThread是微软在Windows API中提供的,可用于建立新线程。 CreateThread将在主线程的基础上创建一个新线程。 多线程实现代码 第二处是定义线程函数: ULONG WINAPI SendFileThread(LPVOID p); SendFileThread是线程的名字,可根据需要自行定义 应该定义在对应的头文件中,且一定要定义为全局的。 多线程实现代码 第三处是线程函数的实现: ULONG WINAPI SendFileThread(LPVOID p){ //此处写实现线程具体功能的代码 } 线程的参数传递 考虑到在创建每个新线程时,需要将待发送文件的地址和发送对象的IP地
您可能关注的文档
- Visual C#2005数据库开发案例教程 教学课件 作者 李志云 第7章.ppt
- Visual C#2005数据库开发案例教程 教学课件 作者 李志云 第8章.ppt
- Visual C#2005数据库开发案例教程 教学课件 作者 李志云 第9章.ppt
- Visual C#2005数据库开发案例教程 教学课件 作者 李志云 第10章.ppt
- Visual C#程序设计教程 教学课件 作者 刘先省 陈克坚 第1章 程序设计语言与程序设计方法.ppt
- Visual C#程序设计教程 教学课件 作者 刘先省 陈克坚 第3章 C Sharp语法基础.ppt
- Visual C#程序设计教程 教学课件 作者 刘先省 陈克坚 第4章 顺序结构程序设计.ppt
- Visual C#程序设计教程 教学课件 作者 刘先省 陈克坚 第5章 选择结构程序设计.ppt
- Visual C#程序设计教程 教学课件 作者 刘先省 陈克坚 第6章 循环结构程序设计.ppt
- Visual C#程序设计教程 教学课件 作者 刘先省 陈克坚 第7章 面向对象编程技术.ppt
- 广东省深圳市龙岗区德琳学校初中部2022-2023学年七年级上学期期中考试英语试题(原卷版+解析).docx
- 广东省珠海市第四中学、立才学校、梅华中学2022-2023学年七年级上学期期中质量检测英语试题(原卷版+解析).docx
- 教科版2024-2025学年六年级科学上册第一单元第4课时《生物细胞》同步练习(含答案).docx
- 牛津沪教版七年级英语上册单元速记•巧练 Unit 7 【单元测试 · 提高卷】.docx
- 牛津沪教版七年级英语上册单元速记•巧练 Unit 5【单元测试 · 基础卷】.docx
- 广东省深圳市南山区太子湾学校2022-2023学年七年级上学期期中考试英语试题(原卷版+解析).docx
- 广东省深圳市南山第二外国语学校(集团)2022-2023学年七年级上学期期中考试英语试题(含听力)(原卷版+解析).docx
- 牛津沪教版七年级英语上册单元速记•巧练 2023-2024学年七年级上学期期末英语全真模拟卷(深圳适用02).docx
- 广东省阳江市江城区2022-2023学年七年级上学期期中考试英语试题(原卷版+解析).docx
- 广东省梅州市梅县区宪梓中学2022-2023学年七年级上学期期中英语试题(原卷版+解析).docx
文档评论(0)