基于TCP网络通信的自动升级程序源码分析-启动升级文件下载程序

升级程序启动后,首先会连接服务器

        private void Connect()
        {
            try
            {

                int port = int.Parse(System.Configuration.ConfigurationManager.AppSettings["Port"]);

                connnectionInfo = new ConnectionInfo(IPAddress, port);

                connection = TCPConnection.GetConnection(connnectionInfo);

            }
            catch (Exception)
            {
                throw new InvalidDataException("升级出现问题 .");

            }
        }

启动升级方法

private void StartUpdate()
        {
            //重新获取了一下服务器的升级信息
            UpgradeConfig upgradeConifg = connection.SendReceiveObject<string, UpgradeConfig>("GetUpMsg", "ResUpMsg", 8000, "Test", customOptions, customOptions);

            if (upgradeConifg.AppVersion > 0)
            {                //在本地显示需要下载的文件列表
                listBox1.DataSource = upgradeConifg.FileList;

                textBox1.Text = upgradeConifg.AppVersion.ToString();

                //需下载的文件的数量
                upFilesCount = upgradeConifg.FileList.Count;

                //发送信息请求下载升级文件

                string filePath = AppDomain.CurrentDomain.BaseDirectory;

                //请求服务器端发送需要升级的文件                //因为服务器端本身是知道需要发送哪些升级文件的,现在只需要此处发出一个信息,说服务器可以开始发送需升级文件了,我已经准备好接收了                //服务器收到逻辑类型为"GetUpFile"的信息后,会开始发送文件                //filePath 这个参数代表服务器升级文件传到客户端后,存放到客户端的位置。                //这样做的好处是,服务器端的文件发来后,本身就携带要存放的位置的信息,个人感觉这样比较方便
                connection.SendObject<string>("GetUpFile", filePath, customOptions);
            }
            else
            {
                MessageBox.Show("不需要升级");
            }
        }

我们看一下服务器的处理方法

服务器端首先会在构造函数中注册一个GetUpFile逻辑类型

   NetworkComms.AppendGlobalIncomingPacketHandler<string>("GetUpFile", IncomingReqUpMsg);

对应的IncomingReqUpMsg方法

       // 客户端请求获取升级文件  的处理程序
        //clientFilePath 是客户端传来的一个路径,此路径服务器端会回传客户端,此路径代表升级文件在客户端的存放位置
        private void IncomingReqUpFile(PacketHeader header, Connection connection, string clientFilePath)
        {
            try
            {
                if (!File.Exists(UPConfigFilePath))
                {
                    upgradeConfig = new UpgradeConfig();
                    upgradeConfig.Save(UPConfigFilePath);
                }
                else
                {                    //获取配置文件
                    upgradeConfig = UpgradeConfig.LoadConfig(UPConfigFilePath);
                }
                //从配置文件中,获取文件名列表,这个地方配置文件中只有文件名,因为服务器知道升级文件的存储位置
                List<string> filenames = upgradeConfig.FileList;

                for (int i = 0; i < filenames.Count; i++)
                {
                    string serverFilePath = AppDomain.CurrentDomain.BaseDirectory + "UpgradeFile\\" + filenames[i].ToString();
                    //生成一个文件ID            //因为有的文件比较大,可能1个G,需要分块发送,fileID用于标志是否为同一个文件
                    string fileID = FileIDCreator.GetNextFileID(NetworkComms.NetworkIdentifier.ToString ());

                     //把文件交给文件发送器,进行发送//判断当前客户端连接的状态
                    if (connection.ConnectionInfo.ConnectionState == NetworkCommsDotNet.ConnectionState.Established)
                    {
                        sendFileDict.AddSendFile(fileID, serverFilePath, clientFilePath + filenames[i].ToString(), connection, fileOptions, sendFileParam);

                    }
                }
            }
            catch (Exception ex)
            {
                LogTools.LogException(ex, "IncomingReqUpFile");
            }

        }

www.networkcomms.cn

www.cnblogs.com/networkcomms 编辑

【开源下载】基于TCP网络通信的自动升级程序c#源码

[源码下载]Demo2.模拟简单登陆-效果图 基于networkcomms2.3.1

[源码下载]Demo1 客户端从服务器获取信息(基于networkcomms2.3.1)

相关文章:

基于TCP网络通信的自动升级程序源码分析--生成升级文件相关的配置文件

基于TCP网络通信的自动升级程序源码分析-客户端连接服务器

基于TCP网络通信的自动升级程序源码分析-客户端请求服务器上的升级信息

基于TCP网络通信的自动升级程序源码分析-启动升级文件下载程序

基于TCP网络通信的自动升级程序源码分析-服务器发送文件

基于TCP网络通信的自动升级程序源码分析-客户端接收文件

时间: 01-28

基于TCP网络通信的自动升级程序源码分析-启动升级文件下载程序的相关文章

基于TCP网络通信的自动升级程序源码分析--生成升级文件相关的配置文件

先从服务器端生成的配置文件说起吧 配置文件名称upgradeconfig.xml 文件内容大致如下 <?xml version="1.0" encoding="utf-8"?> <UpgradeConfig xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">

基于TCP网络通信的自动升级程序源码分析-客户端请求服务器上的升级信息

每次升级,客户端都会获取服务器端存放在upgradefile文件夹下的需要升级的文件和升级信息配置文件(即upgradeconfig.xml文件) 我们来看一下代码 //升级信息配置文件相对应的类 ( 升级信息配置文件是由这个类转化成的) private UpgradeConfig upgradeConfig = null; //客户端存储升级配置文件的地址 是放在客户端根目录下的 (就是把服务器 upgradefile/upgradeconfig.xml下载到客户端存放的位置) string

基于TCP网络通信的自动升级程序源码分析-客户端接收文件

升级程序客户端接收文件 /// <summary> /// 文件数据缓存 索引是 ConnectionInfo对象 数据包的顺序号 值是数据 /// </summary> Dictionary<ConnectionInfo, Dictionary<long, byte[]>> incomingDataCache = new Dictionary<ConnectionInfo, Dictionary<long, byte[]>>();

基于RTL819X实现的Router/AP的源码分析[一]

*************************************************************************************************************************** 作者:EasyWave                                                                               时间:2015.01.11 类别:路由器类-基于RTL819X实现的Ro

Hadoop源码分析—— Job任务的程序入口

这篇文章大致介绍Hadoop Job的程序是如何启动的. 通常用Java编写的Hadoop MapReduce程序是通过一个main方法作为程序的整个入口,如下: public static void main(String[] args) throws Exception { int res = ToolRunner.run(new Configuration(), new CalculateSumJob(),args); System.exit(res);} 可以看到这个Job任务的MapR

【小程序源码案例】微信小程序项目开发案例分享

作者:web小二本文标签: 微信小程序 小程序源码案例 小程序项目小程序的开发,并不是适合所有公司,我今天跟大家分享小程序方面的教程,主要是供大家学习使用.学习这种东西,有时候则是单纯的喜欢,没有任何目的,很单纯的为了好玩,记得很早之前学flash,没有想法,就是觉得好玩,纯娱乐爱好而已.到后来玩视频剪辑也是出于同样的原因,不图钱财名利,只是图自己个人爱好娱乐. 但是,学习,有时候则是需要有明确目的,特别是关系到自己吃饭问题的时候,你就需要非常有目的去学习,并且还需要制定好学习的计划与目标,希望

vscode源码分析【三】程序的启动逻辑,性能问题的追踪

第一篇: vscode源码分析[一]从源码运行vscode 第二篇:vscode源码分析[二]程序的启动逻辑,第一个窗口是如何创建的 启动追踪 代码文件:src\main.js 如果指定了特定的启动参数:trace vscode会在启动之初,执行下面的代码: const contentTracing = require('electron').contentTracing; const traceOptions = { categoryFilter: args['trace-category-f

TOMCAT源码分析(启动框架)

建议: 毕竟TOMCAT的框架还是比较复杂的, 单是从文字上理解, 是不那么容易掌握TOMCAT的框架的. 所以得实践.实践.再实践. 建议下载一份TOMCAT的源码, 调试通过, 然后单步跟踪其启动过程. 如果有不明白的地方, 再来查阅本文, 看是否能得到帮助. 我相信这样效果以及学习速度都会好很多! 1. Tomcat的整体框架结构 Tomcat的基本框架, 分为4个层次. Top Level Elements: Server Service Connector HTTP AJP Conta

Zookeeper 源码分析-启动

Zookeeper 源码分析-启动 博客分类: Zookeeper 本文主要介绍了zookeeper启动的过程 运行zkServer.sh start命令可以启动zookeeper.入口的main函数在类中QuorumPeerMain. main函数主要调用了runFromConfig函数,创建了QuorumPeer对象,并且调用了start函数,从而启动了zookeeper. Java代码   public class QuorumPeerMain { protected QuorumPeer