更新程序设计

大致设想了两种更新方式,如下所示:

一种简单暴力,直接请求静态资源服务器上的文件

第二种考虑了网络传输不稳定时,中断的情况。再次启动更新时会检测本地文件下载多少了,然后接着上次中断的位置继续下载。

更新过程

更新过程就如同平时大家使用软件更新的过程一样,客户端程序启动,检测到更新,启动更新程序,客户端关闭,更新程序下载更新包,下载完成后进行解压,覆盖本地客户端文件,更新程序启动客户端,客户端启动,更新程序关闭。

代码

主要使用WebClient类及HttpWebRequest类

WebClient类

1.WebClient.DownloadFileCompleted事件:异步文件下载操作完成时发生。

备注:

每次异步文件下载操作完成后,将引发此事件。通过调用启动的异步文件下载 DownloadFileAsync 方法

AsyncCompletedEventHandler是此事件的委托。

AsyncCompletedEventArgs类为事件处理程序提供事件数据

示例:

  1.  
        WebClient client = new WebClient();
  2.  
        Uri uri = new Uri(address);
  3.  
        client.DownloadFileCompleted += new AsyncCompletedEventHandler(Func1);
  4.  
        client.DownloadProgressChanged += new DownloadProgressChangedEventHandler(Func2);
  5.  
        client.DownloadFileAsync(uri, "E:\\source\\Update.zip");

2.WebClient.DownloadProgressChanged事件:在异步下载操作成功转换部分或全部数据时发生。

备注:

每当异步下载取得进展时,就会引发此事件。

DownloadProgressChangedEventHandler是此事件的委托

DownloadProgressChangedEventArgs类为事件处理程序提供事件数据

使用以下方法之一启动下载时,引发此事件:

DownloadDataAsync    从资源下载数据并返回Byte[]数据

DownloadFileAsync      将数据从资源下载到本地文件

OpenReadAsync           从资源返回数据

3.DownloadProgressChanged事件:使用DownloadProgressChangedEventArgs类  实例化为e

e.TotalBytesToReceive    从WebClient数据下载操作获取的字节总数

e.BytesReceived              获取一次接收的字节数

e.ProgressPercentage     获取异步任务进度百分比

e.UserState                      获取唯一的用户状态

HttpWebRequest类

       主要连接下载使用代码如下:
 
  1.  
    //打开网络连接
  2.  
    string StrUrl = "http://xxx.xxx.x.xxx:xxxx//...";//资源文件地址
  3.  
    HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(StrUrl)//为指定的URL方案初始化新的WebRequest实例
  4.  
    request.AddRange((int)StartPos);//向请求添加(从请求数据的开始处或结束处的特定范围的)字节范围标头
  5.  
    //向服务器请求,获得服务器回应数据流
  6.  
    Stream ns = request.GetResponse().GetResponseStream();//返回来自Internet资源的响应;从Internet资源返回数据流
  7.  
    int nReadSize = 0;
  8.  
    byte[] nbytes = new byte[512];
  9.  
    nReadSize = ns.Read(nbytes,0,512);
  10.  
    while(nReadSize > 0)
  11.  
    {
  12.  
        fs.Write(nbyte, 0, nReadSize);//写入本地文件流中
  13.  
        nReadSize = ns.Read(nbytes, 0, 512);
  14.  
    }
  15.  
    ns.Close();
  16.  
    request.About();
  17.  
     

抱歉刚刚没写完就传上来了,被同事拉回家了。。。。。。

出处:https://blog.csdn.net/Yl12fh/article/details/81033295

最新文章

  1. initialize和init以及load方法的区别与使用以及什么时候调用
  2. javaWeb中 servlet 、request 、response
  3. 【重要更新】Senparc.Weixin SDK v4.3.3升级说明
  4. Android开发之蓝牙 --修改本机蓝牙设备的可见性,并扫描周围可用的蓝牙设备
  5. Web项目后台测试流程
  6. Spring3.1新属性管理API:PropertySource、Environment、Profile
  7. JavaScript之数据类型讲解
  8. POJ 1743 Musical Theme 后缀数组 最长重复不相交子串
  9. Emacs 安装 jedi
  10. UVA 540 Team Queue
  11. OSI 7层模型
  12. js调试工具console详解
  13. js数组扁平化
  14. 第一节: 结合EF的本地缓存属性来介绍【EF增删改操作】的几种形式
  15. Python退火算法在高次方程的应用
  16. angular.injector()
  17. curl 支持 http2
  18. hdu4003
  19. web的几种返回顶部
  20. 何凯文每日一句打卡||DAY5

热门文章

  1. 无法卸载Sql Server 的解决办法
  2. 使用DLL在进程间共享数据
  3. final文案+美工
  4. MySQL:存储过程和函数
  5. 1-log4j2入门
  6. LimeSDR Getting Started Quickly | LimeSDR上手指南
  7. day12作业答案
  8. Codeforce 9C - Hexadecimal's Numbers
  9. file类和io流
  10. win7快捷方式图标修复