网络的虚拟实验平台设计与实现毕业设计论文.doc_第1页
网络的虚拟实验平台设计与实现毕业设计论文.doc_第2页
网络的虚拟实验平台设计与实现毕业设计论文.doc_第3页
网络的虚拟实验平台设计与实现毕业设计论文.doc_第4页
网络的虚拟实验平台设计与实现毕业设计论文.doc_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

毕毕 业业 设设 计计( 论论 文文) 基于网络的虚拟实验平台基于网络的虚拟实验平台 - -动态升级模块的设计与实现动态升级模块的设计与实现 论论文作者姓名:文作者姓名: 申申请请学位学位专业专业: : 申申请请学位学位类别类别: : 指指导导教教师师姓姓名名( (职职称称) ): : 论论文提交日期:文提交日期: 基于网络的虚拟实验平台基于网络的虚拟实验平台- -动态升级模块的设计与实现动态升级模块的设计与实现 摘摘 要要 为优化学校虚拟实验平台功能,以其网络化改进方向为目标,设计与实现 虚拟实验平台的动态升级模块。现有的虚拟实验平台不具有任何网络功能,所 能进行的实验内容也相当有限,更重要的是实验内容的更新也是一大问题。该 动态升级模块以现有的虚拟实验平台程序为基础,通过向目标主机查询是否拥 有本机所没有的实验内容,如有则由用户决定是否下载,另外查询目标主机实 验内容的版本号,与本机版本相比较,判断是否为新版本的实验内容,最后由 用户决定是否更新。 关键词:关键词:虚拟实验平台;版本;动态升级。 the virtual experimental platform based on the network- the design and realization of the dynamic update module abstract in order to optimize the function of the virtual experimentation platform and with the aim of its network amelioration, we design and realize the dynamic update module of the virtual experimentation platform. the experimentation platform which we already provided with dont have any network function and it has few of the experiment we need, besides the update of the experimentation platform is the most important problem. this dynamic update module is based on the program of the dummy experimentation we already provided with, we search the host computer whether has the experiment we dont have and decide to download the new experimentation or not by the user. on the other side, we search the version of the experiment of the host computer, compare with the version we already provided with and decide to update or not. key words: virtual experimental platform; version; dynamic update. 目录目录 论文总页数:18 页 1 引言1 1.1 课题背景 1 1.2 本课题的研究意义1 1.3 本课题的研究方法1 2 系统构成 .1 2.1系统概要.1 2.2系统模块.2 2.3项目要求.2 3 开发工具及背景2 3.1visual c+ 6.0.2 3.2网络基础知识.2 3.2.1osi 参考模型 2 3.2.2tcp/ip 参考模型.4 3.3c/s 结构工作过程5 3.4c/s 结软件自动更新的背景6 4 虚拟实验平台动态升级模块的设计与实现 .7 4.1界面设计.7 4.2程序执行流程图.7 4.3主要步骤及具体实现方案.8 4.3.1查询服务器端信息8 4.3.2比较新旧版本9 4.3.3获得升级程序文件的路径11 4.3.4获得文件升级后的保存路径11 4.3.5从服务器下载文件并保存到本地11 4.3.6关于如何保存当前版本号的问题13 5 程序测试过程及结果 14 5.1老版-新版本成功升级 .14 5.2版本无需更新.15 结 论.16 参考文献.16 致 谢.17 声 明.18 第 1 页 共 18 页 1 1 引言引言 1.11.1 课题背景课题背景 为优化学校虚拟实验平台功能,以其网络化改进方向为目标,设计与实现 虚拟实验平台的动态升级模块。现有的虚拟实验平台不具有任何网络功能,所 能进行的实验内容也相当有限,所以实验内容的更新是一大问题。现需要在现 有的虚拟实验平台程序的基础上,设计并实现其动态升级模块。该模块通过向 目标主机查询实验内容的版本号,与本机实验的版本号相比较,判断是否为新 版本的实验内容,最后实现实验的版本更新。 1.21.2 本课题的研究意义本课题的研究意义 当前,升级功能作为大多数软件延长其生命周期必不可少的手段,为了赋 予实验平台功能的可更新性,增强实验平台的灵活性,赋予其网络功能有着极 为重要的意义。本设计的主要目的是为了检查使学生综合运用以前所学知识 (包括以前所学的一些关于网络技术、编程技术、网络与信息安全等知识)的 能力,设计开发一个软件升级模块;既锻炼了学生的实际动手能力,又引导学 生进行了一次模拟实际产品的开发,对于学生以后工作能力的培养具有重要的 意义。 1.31.3 本课题的研究方法本课题的研究方法 本题目要求设计开发一个功能较完善的软件升级模块。因此,本次毕业设 计应首先分析软件升级的相关功能,结合本次毕业设计的相关要求写出需求分 析;其次,综合运用以前所学的相关知识,选用 visual c+进行本毕业设计的 开发;在设计中重点以需求分析为基础,写出系统开发计划、实现流程及相关 问题的实现方法;同时,在开发设计与实现中,要保存好相关的设计文挡,为 后面的毕业论文的写作准备材料;最后,系统开发完毕后,进行调试和试运行, 做好调试和试运行的相关记录,也为后面的毕业论文的写作准备材料。 2 2 系统构成系统构成 2.12.1系统概要系统概要 虚拟实验平台是成都信息工程学院单片机与接口等相关实验课程中使用的 一款微机实验仿真实验系统。主要具有以下功能和特点: 1仿真 8255、8253 和基本 i/o 接口电路等; 2虚拟常用外围单元电路,包括指示灯、数码管、传感器、交通、霓虹灯 等,虚拟平台可同时使用; 第 2 页 共 18 页 3提供了典型实验项目的参考实例和实验教学,还可完成相关的课程设计。 虚拟实验就是利用外部输入(如鼠标的点击、拖动和键盘的敲击等),将计 算机上虚拟的各种仪器,按实验要求、过程,组装成一个完整的实验环境,同 时在这个环境中完成实验操作,包括实验器材的添加、实验条件的改变、数据 采集以及实验结果的模拟、分析。它包含了虚拟仿真技术、计算机技术、实验 技术、网络技术与专业等多方面理论知识。 2.22.2系统模块系统模块 该虚拟实验平台现有五个方向的网络化改进模块: 1vlp2p 通信逻辑模块; 2动态升级模块; 3远程指导演示模块; 4远程协作模块; 5教师管理模块; 本人完成的是动态升级模块。 2.32.3项目要求项目要求 完成动态升级的基本功能,通过查询目标主机实验内容的版本号,与本机 版本相比较,判断是否为新版本的实验内容,最后实现实验的版本更新。 3 开发工具开发工具及背景及背景 3.13.1visual c+ 6.0 visual c+6.0 是微软98 年推出的产品,它提供了强大的编译能力以及良 好的界面操作性。能够对windows 9x、windows nt 以及windows 2000 下的 c+程序设计提供完善的编程环境。同时visual c+6.0 对网络、数据库等方面 的编程也都提供相应的环境支持。 3.23.2网络基础知识网络基础知识 .1 osi 参考模型参考模型 国际标准化组织(iso)开发了开放式系统互联(osi)参考模型,以促进计算机 系统的开放互联。开放式互联就是可在多个厂家的环境中支持互联。该模型为 计算机间开放式通信所需要定义的功能层次建立了全球标准。osi 模型将通信 会话需要的各种进程划分成 7 个相对独立的功能层次,这些层次的组织是以在 一个通信会话中事件发生的自然顺序为基础的。图 1 描述了 osi, 1-3 层提供了 网络访问,4-7 层用于支持端端通信。 1物理层7物理层是 osi 模型的最低层,它建立在物理通信介质的基础 上,规定了机械的、电气的功能;该层负责建立、保持和拆除物理链路;规定 第 3 页 共 18 页 如何在此链路上传送原始比特流;比特如何编码,使用的电平,极性,连接插 头插座的插脚如何分配等。所以在物理层数据的传送单位是比特(bit) 。 0si 参考模型 层次描述 osi 层次号 应用层7 表示层6 会话层5 传输层4 网络层3 数据链路层2 物理层1 图 1- osi 参考模型 2数据链路层它把相邻两个节点间不可靠的物理链路变成可靠的无差错的 逻辑链路,包括把原始比特流分帧(frame)、顺序、排序、设置检错、确认、 重发、流控等功能;数据链路层传动信息的单位是 frame,每帧(frame)包括一定 数量的数据和一些必要的控制信息,在每帧(frame)的控制信息中,包括同步信 息、地址信息、流量信息等;同物理层相似,数据链路层负责建立、维护和释 放数据链路。 3网络层,它连接网络中任何两个计算机点,从一个节点上接收数据,正 确的传送到另一个节点;在网络层,传送的信息单位是分组或包(packet) 。网 络层的主要任务是要选择合适的路由和交换节点,透明地向目的站交付发送站 所发的分组或包,这里的透明表示收发两端好像是直接连通的,另外网络层还 要解决网络互连、拥挤控制等问题。上述三层组成了所谓的通信子网,用户计 算机连接到此子网上。通信子网负责把一个地方的数据可靠地传送到另一个地 方,但并未实现两个地方主机上进行进程之间的通信,通信子网的主要功能是 面向通信的。 4传输层上真正地实现了端对端间通信,把数据可靠地从一方的用户进程 或程序送到另一方的用户进程或程序。这一层的控制通常由通信两端的计算机 完成。中间节点一般不提供这一层的服务,这一层的通信与通信子网无关。从 这一层开始的以上各层全部是针对通信的最终的源端目的端计算机的进程之间 的。传输层传送的信息单位是报文(message) 。传输层向上一层提供一个可靠 的端一端服务,使上一层看不见下面几层的通信细节。正因为如此,传输层成 第 4 页 共 18 页 为网络体系结构中关键的一层,对于传输层的功能,主要在主机内实现。而对 于物理层、数据链路层以及网络层的功能均能在报文接口机中实现。对于传输 层之上的各个层次的功能通常在主机中实现。 5会话层又称对话层会话层允许两个计算机上的用户进程建立对话连接, 双方相互确认身份,协商对话连接的细节;它可管理对话是双向同时进行的, 还是任何时刻只能一个方向进行。在后一种情况下,对话层控制哪一方有权发 送数据;对话层还提供同步机制,在数据流中插入同步点机制,在每次网络出 现故障后可以仅重传最近一个同步点以后的数据,而不必从头开始。以上两层 为两个计算机上的用户进程或程序之间提供了正确传送数据的手段。 6表示层主要解决用户信息的语法表示问题。表示层将数据从适合于某一 系统的语法转变为适合于 osi 系统内部使用的语法。具体地讲,表示层对传送 的用户数据进行翻译、编码和变换,使得不同类型的机器对数据信息的不同表 示方法可以相互理解。 7应用层主要处理资源可用性和安全问题,它包含了大量人们普遍需要的 协议,如 ftp、telnet、http、smtp 等。最近几年,应用层协议发展很快, 出现了很多新的应用,如 icq、multimedia stream 等。 .2 tcp/ip 参考模型参考模型 tcp/ip 使跨平台,或称为异构的网络互联成为可能。由图 2 我们可以看到, tcp/ip 与 osi 参考模型不同,tcp/ip 模型更侧重于互联设备间的数据传送,而 不是严格的功能层次划分。它通过解释功能层次分布的重要性来做到这点,但 仍为设计者具体实现协议留下很大的余地。因此,osi 参考模型在解释互联网 络通信机制比较适合,但 tcp/ip 成为了互联网络协议的市场标准。tcp/ip 参 老-模型是在它所解释的协议出现很久以后才发展起来的,更重要的是,在于它 更强调功能分布而不是严格的功能层次的划分,因此它比 osi 模型更灵活。 tcp/ip 参 考模型层 次描述 tcp/ip 层次号 应用层4 传输层3 网络层2 数据链路层1 图 2- tcp/ip 参考模型 1应用层: 第 5 页 共 18 页 应用层包括 smtp, ftp, http, nfs, nis, lpd, telnet f ii remote login 应 用层包括一些服务,这些服务在 osi 中由独立的三层实现。这些服务是和端户 相关的认证、数据处理以及压缩。包括电子邮件、浏览器、telnet 以及其他的 internet 应用。 2传输层: 传输层包括 tcp ( transport control protocol,传输控制协议)和 udp (user datagram protocol,用户数据报协议)。udp 几乎不进行检查,而 tcp 提 供传输保证。与 osi 中传输层不一样,tcp 不保证报文的准确传输。tcp 为两 台主机提供高可靠性的数据通信。而另一方面,udp 则为应用层提供一种非常 简单的服务,它只是把称作数据报的分组从一台主机发送到另一台主机,但并 不保证该数据报能到达另一端。任何必需的可靠性必须由应用层来提供。 3网络层: tcp/ip 协议族中,网络层由以下协议组成:icmp (internet r 联网托制报文 协议)、ip(网际协议)、igmp (internet 组管理协议)、rip, ospf 和月 j -t 几路由 的 egpo 网络层处理报文的路由管理。 4链路层: 链路层包括 arp 和 rarp,负责报文传输;链路层管理网络的连接并提供 网络上的报文输入/输出。 3.33.3c/s 结构工作过程结构工作过程 c/s结构,全称client/server(客户端/服务器)结构,通过将任务合理分配到 client 端和server 端,降低了系统的通讯开销,可以充分利用两端硬件环境的 优势,在tcp/ip网络应用中,通信的两个进程间相互作用的主要模式是客户机/ 服务器模式(client/server),即客户向服务器提出请求,服务器接收到请求后,提 供相应的服务。客户机/服务器模式的建立基于以下两点:首先,建立网络的起 因是网络中软硬件资源、运算能力和信息不均等,需要共享,从而造就拥有众 多资源的主机提供服务,资源较少的客户请求服务这一非对等作用。其次,网 之间进程通信完全是异步的,相互通信的进程间既不存在父子关系,又不共享 内存缓冲区,因此需要一种机制为希望通信的进程间建立联系,为二者的数据 交换提供同步,这就是基于客户机/服务器模式的tcp/ip。 客户机/服务器模式在操作过程中采取的是主动请求的方式。首先服务器方 要先启动,并根据请求提供相应的服务:打开一个通信通道并告知本地主机, 它愿意在某一地址和端口上接收客户请求。等待客户请求到达该端口。接收到 重复服务请求,处理该请求并发送应答信号。接收到并发服务请求,要激活一 个新的进程(或线程)来处理这个客户请求。新进程(或线程) 处理此客户请求, 并不需要对其它请求做出应答。服务完成后,关闭此新进程与客户的通信链路, 第 6 页 共 18 页 并终止。返回第二步,等待另一客户请求。关闭服务器:客户方:打开一个通 信通道,并连接到服务器所在主机的特定端口。向服务器发服务请求报文,等 待并接收应答;继续提出请求。请求结束后关闭通信通道并终止。 3.43.4c/s 结软件自动更新的背景结软件自动更新的背景 自动升级软件是一个独立的应用程序(单独的可执行文件例如 myupdate.exe),供软件开发者编写代码,以外部程序的方式运行,例如调用 shellexecute 这个 api 函数,或者在各种编程语言的中采用不同的方法来运行, 如 c 语言可以用 system 函数、visual basic 语言则可以用 shell 函数,其他语言 也有类似的方法。 自动升级软件的基本功能是对软件进行升级,首先需要能检测到软件最新 版本的信息。软件开发者将软件最新版本的信息保存为一定格式的文件,放置 到网络上固定的地址,自动升级软件访问该地址下载文件到本地,解析文件内 容以进行升级。文件格式可以是任意的,但考虑到通用性,宜采用容易阅读、 容易解析的文件格式。下载文件时采用的通信协议也可以是任意的,但最好也 是采用通用的成熟的协议,例如 http、ftp 协议等,充分利用已有的技术, 减少开发新协议的工作量。比如 http 协议,用 wininet 系列 api 函数来实现 文件的下载。自动升级软件每运行一次,便到指定的网址下载软件最新版本的 信息文件,并以此信息文件内容来获取软件最新版本的信息。 下载到软件最新版本的信息文件(以下称之为配置文件)后,自动升级软 件将解析该文件,根据文件内容来完成软件升级。配置文件必须满足一定的格 式,我是通过读取update区段的 appname 的值来判断该文件格式是否正确 的,如果读到的是空内容则认为文件的格式不正确并停止升级。配置文件中包 含软件最新的版本号(version),用以和本地软件版本号相比较。本地软件版 本号以命令行参数方式传入,例如:myupdate.exe /currentversion=1.1。在配置 文件中,可以定义一系列的操作命令,包括下载、复制、移动、删除文件、运 行外部程序等,最终完成软件的升级。一次升级需要更新的文件往往不止一个, 配置文件中指定了要下载的文件总数(filecount),以及各个文件的文件名 (name)、下载地址(url)、文件大小(size)和要更新到的路径 (destpath)。 在升级替换文件时,如果可执行文件或动态链接库等已驻留内存,由于操 作系统的保护,文件替换是不能成功的,此时需要结束程序的运行再替换文件, 也就是自动升级程序要通知正在运行的主程序:升级已经就绪、需要暂时结束 程序来完成升级。通过在应用进程间发送消息的方法来实现升级完毕消息的传 递,接收消息的目标窗口句柄、窗口标题、消息内容以命令行参数传入。 第 7 页 共 18 页 自动升级软件可以以带进度显示的窗口方式运行,显示当前下载的文件、 下载速度、完成比例和总升级进度等,让用户对升级过程有一个明确的了解。 为了保持软件的友好性,软件开发者在调度自动升级程序时,也就是设计主程 序时,应当允许用户对软件更新行为进行控制,可设置是否检测更新以及检测 更新的时间周期。除非必须,应保留用户不对软件进行升级的选择权,升级只 是一种建议,最好是能提示新版本软件优于以往版本的特性,让用户自己决定 是否进行升级。 不同的软件,其自动升级程序应当可以分别独立地运行,互不干扰,但是 同一软件的自动升级程序应当只能运行一个实例,否则可能会发生文件读写冲 突等问题。启动自动升级软件时,以命令行参数方式传入要升级的软件名,例 如 myupdate.exe /appname=myprogram /currentversion=1.1,自动升级软件以 此软件名创建互斥量,避免同时运行同一软件的多个自动升级程序实例。 4虚拟实验平台动态升级模块的设计与实现虚拟实验平台动态升级模块的设计与实现 4.14.1 界面设计界面设计 程序界面如图 3 所示: 图 3-程序界面 4.24.2 程序执行流程图程序执行流程图 该升级程序的执行流程图如图 4 所示。 第 8 页 共 18 页 图 4-程序执行流程图 4.34.3 主要步骤及具体实现方案主要步骤及具体实现方案 .1 查询服务器端信息查询服务器端信息 1设计思路: 服务器端信息记录于 http:/localhost/update/index.asp(这里以本机测试为例) 文件中,主要包括版本号、更新文件路径信息。在 asp 中,使用 response 对 象可以将输出发送到客户端,其中的 write 方法 respongs.write 是将变量作为字 符串写入当前的 http 输出。这里是通过读取 index.asp 中的 respongs.write 得到字符串,此字符串为服务器版本号以及 client.exe 更新文件路径。 2具体实现如下: 以本机测试为例,由 strinfo=dlg-pmyfun-internetgetinfo(strurl)得到#” ipos2=strinfo.find(“#”,ipos1+1); newversion=strinfo.mid(ipos1+1,ipos2-ipos1-1); 得到服务器端版本号; 最后再由: ipos1=ipos2; ipos2=strinfo.find(“#”,ipos1+1); strupdateurl=strinfo.mid(ipos1+1,ipos2-ipos1-1); 得到更新文件 client.exe 路径; 函数 cstring:find 和 cstring:mid 将在 4.3.2 中说明。 .2 比较新旧版本比较新旧版本 1设计思路: 版本号格式设计为 x.x.x.x,例如客户原始版本号为 ;这里我采用 的比较方法是把版本号转换为 4 位数字,如:版本号 分别提取这 4 个字 符然后转换成整形变量,采用公式 1*1000+2*100+3*10+4 转换成 1234,最后比 较大小。 2相关函数说明: (1)cstring:find(str,”要查找的字符串”,pos),函数用于从给定的字符串中 寻找并返回第一处匹配指定子字符串开始的序号, 第三个参数 pos 指定搜索开始 的位置,这个参数可以省略(使用默认值 1),如果字符串不能包含该子字符串相 匹配部分,则返回-1; (2)cstring:mid(string,npos,n), 函数用于从字符串 string 的 npos 位开始截取 n 位; (3)atoi 函数用于将字符串转换成整型数。 3下面以版本号第一位的比较为例来说明程序版本的比较方法: ioldpos1=stroldversion.find(“.”); ioldpos2=stroldversion.find(“.”,ioldpos1+1); ioldpos3=stroldversion.find(“.”,ioldpos2+1); /分别保存老版本号中第一、二、三个“.”字符出现的序号到 ioldpos1,ioldpos2,ioldpos3; ipos1=strnewversion.find(“.”); 第 10 页 共 18 页 ipos2=strnewversion.find(“.”,ipos1+1); ipos3=strnewversion.find(“.”,ipos2+1); /分别保存新版本号中第一、二、三个“.”字符出现的序号到 ipos1,ipos2,ipos3; stroldver1=stroldversion.mid(0,1); stroldver2=stroldversion.mid(ioldpos1+1,1); stroldver3=stroldversion.mid(ioldpos2+1,1); stroldver4=stroldversion.mid(ioldpos3+1,1); /分别从版本号字符串的第 0、ioldpos1+1、ioldpos2+1、ioldpos3+1 位截取 1 个字符长度保存到 stroldver1、stroldver2、stroldver3、stroldver4; strnewver1=strnewversion.mid(0,1); strnewver2=strnewversion.mid(ipos1+1,1); strnewver3=strnewversion.mid(ipos2+1,1); strnewver4=strnewversion.mid(ipos3+1,1); /分别从版本号字符串的第 0、ipos1+1、ipos2+1、ipos3+1 位截取 1 个字符长度 保存到 strnewver1、strnewver 2、strnewver 3、strnewver 4; oldnum1=atoi(stroldver1); oldnum2=atoi(stroldver2); oldnum3=atoi(stroldver3); oldnum4=atoi(stroldver4); /分别把 4 个老版本号字符转换成整形; newnum1=atoi(strnewver1); newnum2=atoi(strnewver2); newnum3=atoi(strnewver3); newnum4=atoi(strnewver4); /分别把 4 个新版本号字符转换成整形; oldnum=oldnum1*1000+oldnum2*100+oldnum3*10+oldnum4; newnum=newnum1*1000+newnum2*100+newnum3*10+newnum4; if(newnumoldnum) 第 11 页 共 18 页 bhavenewversion=true; return bhavenewversion; /通过比较两个版本号转换值来确定版本新旧与否。 .3 获得升级程序文件的路径获得升级程序文件的路径 1首先简要说明下 getmodulefilename 函数: 格式:getmodulefilename(null, szpath,max_path); 说明:把指定模块中的可执行文件绝对路径与文件名赋值给 szpath, 2设计思路: 首先通过 getmodulefilename 函数得到本地升级程序 myupdate.exe 的路径, 例如:f:cuit毕业设计备份7.24myupdatedebugmyupdate.exe。当然得到的 路径还包括 exe 名,这里需要先去掉这部分,然后才能得到目录。这里我们可 以使用 ipos_u =strfilepath.find(“myupdate.exe”)找到程序上级目录所在字符的 序号,最后使用 strpath=strfilepath.mid(0,ipos_u)得到 f:cuit毕业设计备份 7.24myupdatedebug,即得所求正确路径。 .4 获得文件升级后的保存路径获得文件升级后的保存路径 1首先简要说明下 string.format 函数: 格式 string.format(fm,.); 第一个参数用 fm 表示输出的格式,每个%符号后面是一个格式化表达式, 格式化表达式:%零个或多个标志最小字段宽度精度修改符格式码 (ps:方括号表示可选参数),这里用到的是格式码 s:参数:字符串值 (string) 含义:打印一个字符串 2实现方法: 通过 stroutlocal.format(“%s%s”,strpath,_t(“myclient.exe”),这样就得到文件升 级后的保存路径和文件名,即 f:cuit毕业设计备份7.24myupdatedebug myclient.exe。 .5 从服务器下载文件并保存到本地从服务器下载文件并保存到本地 如何从 internet 上有效而稳定地下载文件 ,这是很多网络应用程序要考虑 的重要问题,下面是本人针对这个问题进行的初步探索: 1dword dwsize; /这个变量被用于存储每次调用 internetreadfile 读取了多少数据; 第 12 页 共 18 页 2char szhead = “accept: */*rnrn”; /用于存储多个 http 头信息。如果在调用 internetopenurl 时不传递这个头信 息,则只能允许打开文本文件; 3void* sztemp16384; /缓冲变量,可以存储来自 internet 的 16kb 的文件数据; 4hinternet hconnect; /这是一个 hinternet 句柄,包含请求结果(来自 internetopenurl); 5if (!(hconnect = internetopenurla (hopen, szurl, szhead, lstrlena (szhead),internet_flag_dont_cache|internet_flag_pragma_noc ache|internet_flag_reload, 0) /此调用可以打开一个使用 url 的 internet 文件句柄。标志表示这个文件总是 被读取,而不是缓存(cache); 6dword dwbytetoread = 0; dword dwsizeofrq = 4; dword dwbytes = 0; /这三个值分别存储文件的大小,httpqueryinfo 内容的大小和总共读取的字节 数; 7if(!httpqueryinfo(hconnect,http_query_content_length|http_que ry_flag_number, (lpvoid) /此调用可以获得文件的大小。如果失败则 dwbytetoread 被置为 0,并且当文 件被下载时不会显示百分比和总数; 8 memset(sztemp,0,sizeof(sztemp); /meset 格式:void *memset(void *s, int c, size_t n); 第 13 页 共 18 页 memset:作用是在一段内存块中填充某个给定的值,它对较大的结构体或数组进 行清零操作的一种最快方法; 9dointernetreadfile (hconnect, sztemp, 16384, /此调用循环中,每次下载一个 16kb 的数据块。 .6 关于如何保存当前版本号的问题关于如何保存当前版本号的问题 1这里采用的是使用 txt 文件来保存当前客户端版号的方法,下面是用到 的几个函数的说明: (1)file * fopen(const char * path,const char * mode); 函数说明: 参数 path 字符串包含欲打开的文件路径及文件名,参数 mode 字符串则代表着 流形态。 mode 有下列几种形态字符串: r 打开只读文件,该文件必须存在; r+ 打开可读写的文件,该文件必须存在; w 打开只写文件,若文件存在则文件长度清为 0,即该文件内容会消失。若文 件不存在则建立该文件; w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。 若文件不存在则建立该文件。 (2)*fgets(char *string, int n, file *stream); 函数说明: 从指定的文件中读一个字符串到字符数组中,函数调用的形式为: fgets(字符 数组名,n,文件指针); 其中的 n 是一个正整数。表示从文件中读出的字符串 不超过 n-1 个字符。在读入的最后一个字符后加上串结束标志0。例如: fgets(str,n,fp);的意义是从 fp 所指的文件中读出 n-1 个字符送入字符数组 str 中。 2实现过程: (1)首先用 fopen 的 r 方式打开 version.txt 文件,看是否为空。如为空或文 件不存在则默认程序的 oldversion 为 ;如不为空,则使用 fgets 函数读取 现版本号存入 oldversion: file *fp = fopen(“version.txt”,”r”); if(fp = null) 第 14 页 共 18 页 oldversion=_t(“”); else char str100; fgets(str,100,fp); oldversion=str ; fclose(fp); (2)判断是否更新版本号,如是,则用 fopen 的 w+方式打开 version.txt,清 空该文件的内容(版本号),写入新版本号,即实现了版本号的更新。 file *fp = fopen(“version.txt”,”w+”); fprintf(fp,”%s”,newversion.getbuffer(0); fclose(fp); 5 5程序测试过程及结果程序测试过程及结果 5.15.1 老版老版-新版本成功升级新版本成功升级 服务器版本: 客户端版本: 测试结果如图 5 和图 6 所示。 第 15 页 共 18 页 图 5-检测新版本 图 6-升级成功 5.25.2 版本无需更新版本无需更新 服务器版本: 客户端版本: 测试结果如图 7 和图 8 所示。 第 16 页 共 18 页 图 7-检测版本 图 8-不需更新 结结 论论 本人在此虚拟实验平台系统中,负责动态升级模块的设计与实现,基本开 发完毕,功能基本符合要求。由于本人是第一次接触 vc+,开发过程中在指 导老师王中科的带领下边学边做。通过此项目的开发,对动态升级模块有了新 的认识和了解。在整个开发过程中,把学到的理论知识如何运用到实践中成为 本人思考得最多的一点。经过此次实践,对我以后的学习以及工作将会有很大 的帮助。 升级功能特别是在线升级是现在很多系统中如防毒软件、网络游戏中都是 必须的一个重要功能。在今后的应用开发中,在实用性方面还可以进一步加强。 参考文献参考文献 1小克鲁格林斯基美.visual c+技术内幕(第四版)m.潘爱民等译.北京:清华大学 第 17 页 共 18 页 出版社,1994。 2 douglas e.comertcp/ip 网络互连技术m北京:清华大学出版社,1998。 3 andrew s.tanenbaum计算机网络m北京:清华大学出版社,1998。 4张越.visual c+网络程序设计实例详解m.北京:人民邮电出版社,2003。 5 steven holzner.visual .c+ 6.0 轻松进阶m.北京:电子工业出版社,2005。 6 john e.swanke.visual .c+mfc 编程实例m.北京:机械工业出版社,2005。 7 张海棠.visual c+ 6.0 编程指南m.北京:航空工业出版社,2002。 第 18 页 共 18 页 致致 谢谢 本文是在王中科老师的热情关心和指导下完成的,他渊博的知识和严谨的 治学作风使我受益匪浅,对顺利完成本课题起到了极大的作用。在此向他表示 我最衷心的感谢! 在论文完成过程中,本人还得到了王守兵同学的热心帮助,本人向他们表 示深深的谢意! 最后向在百忙之中评审本文的各位专家、老师表示衷心的感谢! 作者简介: 姓 名:吴舟海 性别: 男 出生年月:1984 年 11 月 民族: 汉 e-mail: 第 19 页 共 18 页 声声 明明 本论文的工作是 2007 年 2 月至 2007 年 7 月在成都信息工程学院网络工程 系完成的。文中除了特别加以标注地方外,不包含他人已经发表或撰写过的研 究成果,也不包含为获得成都信息工程学院或其他教学机构的学位或证书而使 用过的材料。除非另有说明,本文的工作是原始性工作。 关于学位论文使用权和研究成果知识产权的说明: 本人完全了解成都信息工程学院有关保管使用学位论文的规定,其中包括: (1)学校有权保管并向有关部门递交学位论文的原件与复印件。 (2)学校可以采用影印、缩印或其他复制方式保存学位论文。 (3)学校可以学术交流为目的复制、赠送和交换学位论文。 (4)学校可允许学位论文被查阅或借阅。 (5)学校可以公布学位论文的全部或部分内容(保密学位论文在解密后 遵守此规定) 。 除非另有科研合同和其他法律文书的制约,本论文的科研成果属于成都信息 工程学院。 特此声明! 作者签名: 2007 年 07 月 25 日 第 20 页 共 18 页 “are you hungry now?“ “no, i am tired and lazy now; if i pursue you i will not catch you, and if i catch you-through your own slowness and clumsiness-i will not kill you, and if i kill you i will not eat you.“ nicholas had begun to back away, and at the last; words, realizing that they were a signal, he turned and began to run, splashing through the shallow water. ignacio ran after him, much helped by his longer legs, his hair flying behind his dark young face, his square teeth-each white as a bone and as big as nicholass thumbnail-showing like spectators who lined the railings of his lips. “dont run, nicholas,“ dr. island said with the voice of a wave. “it only makes him angry that you run.“ nicholas did not answer, but cut to his left, up the beach and among the trunks of the palms, sprinting all the way because he had no way of knowing ignacio was not right behind him, about to grab him by the neck. when he stopped it was in the thick jungle, among the boles of the hardwoods, where he leaned,.; out of breath, the thumping of his own heart the only . sound in an atmosphere silent and unwaked as earths long, prehuman day. for a time he listened for any sound ignacio might make searching for him; there was none. he drew a deep breath then and said, “well, thats over,“ expecting dr. island to answer from somewhere; there was only the green hush. the light was still bright and strong and nearly, shadowless, but some interior sense told him the day, was nearly over, and he noticed that such faint shades as he could see stretched long, horizontal distortions of their objects. he felt no hunger, but he had fasted be- fore and knew on which side of hunger he stood; he was not as strong as he had been only a day past, and by this time next day he would probably be unable to outrun ignacio. he should, he now realized, have eaten the monkey he had killed; but his stomach revolted at the thought of the raw flesh, and he did not know how he might build a fire, although ignacio seemed to have done so the night before. raw fish, even if he were able to catch a fish, would be as bad, or worse, than raw monkey; he remembered his effort to open a coconut-he had failed, but it was surely not impossible. his mind was hazy as to what a coconut might contain, but there had to be an edible core, because they were eaten in books. he decided to make a wide sweep through the jungle that would bring him back to the beach well away from ignacio; he h

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论