基于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网络通信的自动升级程序源码分析-客户端接收文件

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值