




已阅读5页,还剩21页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
文件传输 授课教师 网络编程 导入 在电子教室软件系统中 教师经常需要通过教师机向所有学生下发文件 传递授课资料 有时也需要学生将完成的作业上传到教师机 这就涉及到一个文件传输的问题 本章我们就通过一个简单的文件传输程序 本章要点 文件传输功能分析设计文件操作编程技术多线程编程技术文件下发程序实现 功能需求分析 包含两个程序 一个发送端程序 一个接收端程序 发送端程序可以由用户选择要发送的文件 发送端程序可以指定发送对象 可以是一个IP范围 也可以是某个IP地址 接收端程序可以由用户指定接收到的文件的存放地址 界面设计 关键技术分析 文件传输的本质用一句话概括就是 发送方将文件数据读出来 然后调用套接字的发送函数将数据传输到接收方 接收方调用套接字接收函数接收数据 然后重新建立文件并将数据写入文件 文件传输流程 发送文件功能的实现 接收文件功能的实现流程 代码详解 文件操作 CFile类 CFile类是MFC文件类的基类 提供非缓冲方式的二进制磁盘输入 输出功能 并直接通过派生类来支持文本文件和内存文件 提供访问本地文件内容的功能 不支持访问网络文件的功能 使用CFile操作文件的基本过程是 定义CFile对象 打开要操作的文件 对文件 写文件 关闭文件 文件操作 Open 函数 该函数的功能是打开指定文件 BOOLCFile Open LPCTSTRlpszFileName UINTnOpenFlags CFileException pException 参数lpszFileName 带完整路径的文件名 指定要打开的文件 参数nOpenFlags 指定文件打开方式 可以是多个标志的组合 文件操作 Read 函数 该函数的功能是从文件中读取文件内容 virtualUINTCFile Read void lpBuf UINTnCount 参数lpBuf 存放读出的文件内容的空间地址 参数nCount 从文件读出的最大字节数 文件操作 Write 函数 该函数的功能是向文件中写数据virtualvoidWrite constvoid lpBuf UINTnCount 参数lpBuf 存储要写入文件的数据的空间地址 参数nCount 要写入文件的数据的字节数 文件操作 Close 函数 功能是关闭文件句柄 文件操作完毕必须调用Close 函数关闭文件 第一步程序扩展 实现较大文件的传输 上面文件传输实例的功能并不强大 但是它的实现过程很简单 说明了文件传输的原理 它忽略了真实文件的大小 在上面的代码中 为了从文件中读取数据 首先获得文件长度 然后开辟一段和文件长度匹配的内存作为文件缓冲 但现在很多文件动辄几百兆字节 往往无法一次开辟如此大的内存容纳如此多的数据 所以对于大文件传输 这段代码显然不合适 解决方法 分段缓冲文件数据 实现方法详见代码 第二步程序扩展 同时向多个目标传输文件 教师机通常需要控制整个教室所有的学生机 需要进行一对多的文件传输需要用户在界面上指出需要发送文件的对象 例如学生机的IP地址范围 考虑传输效率 需要采用多线程技术 什么是多线程技术 多线程是为了同步完成多项任务多线程不是为了提高运行效率 而是为了通过提高资源使用效率来提高系统的效率 线程是一组指令的集合 或者是程序的特殊段 它可以在程序里独立执行 也可以把它理解为代码运行的上下文 线程负责在单个程序里执行多任务 通常由操作系统负责多个线程的调度和执行 实现发送文件功能的主线程流程 多线程实现代码 在本程序中 多线程编程涉及三处代码 第一处是创建一个新线程 使用CreateThread函数 CreateThread NULL 0 SendFileThread LPVOID pMeg NULL NULL 函数CreateThread是微软在WindowsAPI中提供的 可用于建立新线程 CreateThread将在主线程的基础上创建一个新线程 多线程实现代码 第二处是定义线程函数 ULONGWINAPISendFileThread LPVOIDp SendFileThread是线程的名字 可根据需要自行定义应该定义在对应的头文件中 且一定要定义为全局的 多线程实现代码 第三处是线程函数的实现 ULONGWINAPISendFileThread LPVOIDp 此处写实现线程具体功能的代码 线程的参数传递 考虑到在创建每个新线程时 需要将待发送文件的地址和发送对象的IP地址传递给新线程 因此需要传递两个字符串参数给线程 按照创建线程函数的定义 只能传递一个指向结构的指针 因此需要定义一个结构体 专门存放需要传递给线程的数据 结构体定义如下 typedefstruct charip 15 文件传递目的地IPcharfileAddr 50 带路径的文件名 myMeg 线程的参数传递 myMeg pMeg 定义一个指向myMeg结构体的指针pMeg myMeg malloc sizeof myMeg 给指针分配空间memcpy pMeg ip ip 15 将IP地址放入结构体memcpy pMeg fileAddr file 50 将文件地址放入结构体CreateThread NULL 0 SendFileThread LPVOID pMeg NULL NULL 创建一个新线程 将结构体指针作为参数传递给线程 线程的参数传递 在新线程中 可以从参数中取出对应的数据 代码如下 ULONGWINAPISendFileThread LPVOIDp myMeg meg myMeg p CStringstrIP meg ip CString
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 访问控制模型研究-洞察及研究
- 2025年性安全教育常识测试题及答案
- 就业政策区域差异研究-洞察及研究
- 出差行车安全知识培训课件
- 陕西省司法考试司法制度考试题(附答案)
- 出差安全培训交底课件
- 2025物业服务委托管理标准合同范本
- 出国企业安全培训课件
- 出入院流程课件
- 出入量记录课件
- 学校食堂运营管理职责与分工
- 会计师事务所公司质量控制制度范本
- 实习生劳务合作合同6篇
- 2025《义务教育信息科技课程标准(2022年版)》测试题库及答案(共4套)
- 环境监测业务流程
- 房屋提前移交免责协议书5篇
- DB36-T 954-2024 低产低效林改造技术规程
- 《环境保护法》知识参考试题库200题(含答案)
- 食堂食材配送采购投标方案(技术标)
- 交通安全防御性驾驶
- 护理情景模拟演练脚本
评论
0/150
提交评论