Visual C++网络编程技术电子教案延霞 03.ppt

Visual C++网络编程技术电子教案延霞 03.ppt

  1. 1、本文档共26页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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地

您可能关注的文档

文档评论(0)

开心农场 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档