版本自动更新程序及3种实现策略

上传人:宝路 文档编号:22560975 上传时间:2017-11-27 格式:DOC 页数:37 大小:125.82KB
返回 下载 相关 举报
版本自动更新程序及3种实现策略_第1页
第1页 / 共37页
版本自动更新程序及3种实现策略_第2页
第2页 / 共37页
版本自动更新程序及3种实现策略_第3页
第3页 / 共37页
版本自动更新程序及3种实现策略_第4页
第4页 / 共37页
版本自动更新程序及3种实现策略_第5页
第5页 / 共37页
点击查看更多>>
资源描述

《版本自动更新程序及3种实现策略》由会员分享,可在线阅读,更多相关《版本自动更新程序及3种实现策略(37页珍藏版)》请在金锄头文库上搜索。

1、版本自动更新程序及 3 种实现策略C/S 程序是基于客户端和服务器的,在客户机编译新版本后将文件发布在更新服务器上。然后建立一个 XML 文件,该文件列举最新版本号和所有文件及文件最后修改日期。如文件较多可以通过工具自动建立XML 文件。当某客户机运行程序后会自动下载这个 XML 文件,通过与本地机器上的版本号匹配,如本机上的版本号比服务器上的要旧,通知客户机运行更新程序。如用户更新了版本,将最新版本号写入配置文件, 这样方便下一次匹配。通过可行性分析可以使用下面 3 种方案下载1.局域网共享文件夹下载 2.Tcp/ip 远程下载 3.通过 Web 方式下载。方式 1 适合内部网络,功能简单,

2、编程只需调用 File.Copy()就能实现。如建立 VPN 网络,也可视为远程下载。我们只需在服务器上共享一个文件夹并设定访问权限,然后将最新版本文件存放在这个目录。升级程序直接从这个目录 Copy 文件即可。方式 2 是通过基于 tcp/ip 的 Socket 组件编程来实现,使用这个机制必须有服务器监听程序。其简单设计思路是在服务器端启动TcpListener 监听客户端的 Socket 连接,当 Client 发送连接请求,TcpListener 捕获当前请求的 Socket,并获取收到的数据 (字符串, 称为命令)。然后由命令处理程序分析该字符串,如果字符串头部包含GET_FILE

3、标识则为下载文件请求。例:客户机向服务器程序发送请求命令:GET_FILE|D:PUBLISHTEST.DLL。首先 TcpListener 捕获当前请求的 Socket.并接收到字符数据GET_FILE|D:PUBLISHTEST.DLL,通过分析发现GET_FILE标识符,表示下载文件请求. 然后通过socket.SendFile(file=D:PUBLISHTEST.DLL)将文件传送给当前 Socket。客户端由 NetworkStream.Read()方法接收来自服务器发送的文件。方式 3 是通过.NetFramework 提供的 WebClient 组件下载文件。只需指定 Down

4、loadData()方法中参数 address(url)。通过上面的介绍,1,3 方法最简单。Tcp/ip 相对复杂。下面讲解版本更新程序系统框架图主窗体下载控制器XmlLoader 关系图图解:frmUpgrader 窗体内定义了一个下载控制器及 2 个 TreeView 控件.当执行检查更新 ,控制器调用当前下载器的 DownloadServerXml()方法从服务器下载 XmlServerFiles.xml 文件。下载成功将文件交给XmlLoader 分析器,分析器创建 XmlDocument 对象。最后将 XML分析器作为 FileView 构造器参数创建 FileView 实例,分别

5、调用FileView 的 LoadTreeViewClient 方法创建客户端文件清单的TreeView 及 LoadTreeViewServer 方法创建服务器端文件清单的TreeView。TreeView 的数据来源是两个 Xml 文件。DownloadController 下载控制器,它负责建立下载策略及控制当前下载器。 FileView 对象实际是个 TreeView 生成器。它跟据 Xml 结构自动生成 TreeView.XmlLoader 分析器主要功能是分析服务器端及本地的 XML 文件(XmlServerFiles.xml 和 XmlClientFiles.xml)。XmlLo

6、ader 类图列举了所有方法,从图中可以看出控制 XmlDocument 对象。通过XmlDocument.SelectSingleNode 方法查找某个指定的文件,然后获取文件最后修改日期文件名等信息用于匹配。IDownloader 接口定义了所有下载器的方法,下面会详细讲解 3个下载器的实现策略。FileInfo 是文件的实体类,结构相当简单,只包含文件名,物理路径及最后修改时间。三种不同的下载器实现方案:三种不同的下载器实现方案类及接口说明: frmUpgrader: 主窗体DownloadController:下载控制器,如上图所示,它是控制IDownloader 接口。IDownlo

7、ader: 下载器接口, 三种不同的下载器分别实现了这个接口LAN_Downloader: 局域网复制文件下载器。WebClient_Downloader: 广域网下载器,通过 WebClient 组件下载文件。TcpIp_Downloader: Tcp/ip 下载器。需要运行 Tcp/ip 服务器提供下载服务。 主窗体有检查更新 及 开始更新两个按钮。分别调用下载控制器的 CheckUpdate()及 Download()方法。下载控制器控制 IDownloader 接口,三种不同的下载器分别实现了这个接口,通过对象多态原理,实际上是下载控制器间接控制着实现 IDownloader 接口的所

8、有下载器。我们可以把 DownloadController 理解为桥接(Bridge)或适配器(Adpater)。 IDownloader 接口实现了 3 种下载策略,这也是策略模式的应用。Tcp/IP 下载器图解 :关于 Tcp/IP 下载这里有个案例使用 Tcp/Ip 下载文件(图) http:/ 下载器需要有服务器程序支持,使用 tcp/ip 传送文件其简单设计思路是在服务器端启动 TcpListener 监听客户端的 Socket 连接。当 Client 发送连接请求,TcpListener 捕获当前请求的 Socket,并获取收到的数据(字符串,称为命令)。然后由命令处理程序分析字符

9、串,如果字符串头部包含 GET_FILE 则为下载文件请求。例:如客户机向服务器程序发送请求:GET_FILE|D:PUBLISHTEST.DLL。首先 TcpListener 捕获当前请求的 Socket,收到字符串,如果是下载文件请求就通过socket.SendFile(file=D:PUBLISHTEST.DLL)将文件传送给当前 Socket。在客户端由NetworkStream.Read()方法接收来自服务器发送的文件。 参考上图来理解如何实现:UpgraderServer 是 tcp/ip 服务器的核心类。他控制 TcpListener对象,TcpListener 负责监听客户端的

10、 Socket 连接。当有下载文件请求时就调用 SendFile()方法将文件传送给当前连接的Socket. Stop()方法用来关闭服务器.SendFile()方法用来发送文件StartListening()方法用户启动监听程序。TcpListener 是监听程序,它负责监听客户端的 Socket 连接。如有连接请求触发 AccecptSocket 方法。该方法返回当前请求的Socket 对象。UpgraderClient 是 tcp/ip 客户端的核心类。他控制 TcpClient对象, TcpClient 对象负责监听来自服务器的请求。DownloadFile()方法详解:要明白客户端是

11、如何接收文件,先要明白 NetworkStream 对象. NetworkStream 是提供用于网络访问的基础数据流。客户机监听来自服务器的数据是通过 NetworkStream.Read()方法实现的,当程序执行到 ns.Read()方法时就开始监听,同时中断下面代码执行,直到接收到数据才会执行 Read()下面的代码。请看代码。byte resBytes = new byte256; /一次接收 256 字节 int resSize; /当前接收到的数据长度 do/开始监听,同时中断下面代码执行,直到接收到数据才会执行 Read()下面的代码。 resSize = ns.Read(res

12、Bytes, 0, resBytes.Length);string msg = Byte2Str(resBytes);if (msg.Trim().ToUpper() = FILE_NOT_FOUND)if (_writeOutput != null) _writeOutput(找不到文件: + file);break;if (resSize = 0) break;ms.Write(resBytes, 0, resSize); while (ns.DataAvailable);ns.Close();请注意 while (ns.DataAvailable)这段代码, 当接受到来自服务器的数据时

13、DataAvailable=True,然后通过 NetworkStream.Read 方法每次读取 256 字节,直到读取完所有数据时DataAvailable=false。这时监听工作完成,跳出 while 循环。最后调用 FileStream 对象保存文件。TcpIp_Downloader Tcp/IP 下载器方法Download():下载 XmlServerFiles.xml 定义的所有文件DownloadFile(FileInfo file):下载单个文件DownloadServerXml():下载服务器上的文件清单Init() /初始化下载器IDownloader 下载器接口定义/

14、/ 下载器接口 / public interface IDownloadervoid Init(); /初始化下载器 void Download();/下载所有文件 FileInfo DownloadFile(FileInfo file); /下载单个文件 XmlLoader XmlServer get; /服务器上的 Xml 文件XmlLoader XmlLocal get;/客户机上的 Xml 文件int DownloadsCount get; /下载成功的文件总数int DownloadFaliedCount get;/下载失败的文件总数void DownloadServerXml();

15、 /下载服务器上的文件清单(xml 文件) void SetProgressBar(ToolStripProgressBar progress);void SetTrace(ListBox logList);下载器类型/ / 下载器类型 / public enum DownloadTypeIntranet = 1,TcpIp = 2,WebDownload = 3下载控制器,该控件器可以创建 3 种不同的下载器。/ / 下载控制器,该控件器可以创建 3 种不同的下载器。 / 策略模式应用。 / public class DownloadControllerprivate IDownloader

16、 _downloader = null;public IDownloader CurrentDownloader get return _downloader; private TreeView _tvServerFiles;private TreeView _tvLocalFiles;private ListBox _log;private ToolStripProgressBar _progress = null;public DownloadController(IDownloader downloader)_downloader = downloader;/ / 跟据下载类型创建 3

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号