您的位置:首页 > 理论基础 > 计算机网络

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

2015-03-03 00:00 369 查看


每次升级,客户端都会获取服务器端存放在upgradefile文件夹下的需要升级的文件和升级信息配置文件(即upgradeconfig.xml文件)

我们来看一下代码

//升级信息配置文件相对应的类 ( 升级信息配置文件是由这个类转化成的)
private UpgradeConfig upgradeConfig = null; //客户端存储升级配置文件的地址 是放在客户端根目录下的 (就是把服务器 upgradefile/upgradeconfig.xml下载到客户端存放的位置)
string UPConfigFilePath = AppDomain.CurrentDomain.BaseDirectory + "UpgradeConfig.xml"; //启动升级程序
private void AppUpdate() { //UpgradeConfig 这个类存储返回的信息 也就是说服务器端返回来的是 UpgradeConfig类型的信息 //Test 是个文本类型的信息 是客户端发给服务器的 //其实在这里 "Test"这个值传递到服务器端后,服务器并没有使用,但是按照networkcomms的用法,又好像必须发送个信息,所以随便写个字符就行 //<string,UpgradeConfig>这里 string 代表发送到服务器的信息是string类型的

//发送一个逻辑类型是"GetUpMsg"的string类型的,具体内容为Test的信息给服务器,服务器收到"GetUpMsg"逻辑类型,会根据逻辑类型找到相应的处理方法,并返回一个UpgradeConfig类型的信息给客户端
//upgradeConfig获取的就是从服务器端返回来的消息,通讯框架帮我们接收到了返回的消息,隐藏了具体过程,我们使用起来就像调用本地方法一样
UpgradeConfig upgradeConifg = newTcpConnection.SendReceiveObject<string, UpgradeConfig>("GetUpMsg", "ResUpMsg", 5000, "Test"); //如果服务器返回的版本号大于本机的版本号
//GetUpgradeVersion()方法用于获取本地配置文件中的版本号

if (upgradeConifg.AppVersion > GetUpgradeVersion()) { //从配置文件中获取升级文件的名称,我们升级时,一般关闭当前程序,另外启动一个程序进行升级
string upgradeAppPath = System.Configuration.ConfigurationManager.AppSettings["UpgradeApp"]; string callBack = AppDomain.CurrentDomain.BaseDirectory + upgradeAppPath; if (File.Exists(callBack)) { //可以进行内网外网环境判断 //如果内网 此处假设为内网
if (true) { //启动升级程序 System.Diagnostics.Process process = System.Diagnostics.Process.Start(callBack); } //如果外网 加一个启动参数
else { System.Diagnostics.Process process = System.Diagnostics.Process.Start(callBack, "s"); } } else { MessageBox.Show("目标程序不存在" + callBack); } this.Close(); this.Dispose(); } }


我们看一下服务器端相应的处理

1:客户端定义了"GetUpMsg"逻辑类型,在服务器端要设定一下

可以在构造函数中添加

//返回更新文件信息<5>
NetworkComms.AppendGlobalIncomingPacketHandler<string>("GetUpMsg", IncomingReqUpMsg);


这样的话,服务器端收到信息后,首先找出其逻辑类型,这里是 GetUpMsg,再根据逻辑类型,找到处理方法,这里是IncomingReqUpMsg

private UpgradeConfig upgradeConfig = null;
private string UPConfigFilePath = AppDomain.CurrentDomain.BaseDirectory + "UpgradeFile\\UpgradeConfig.xml";
//处理方法中参数为3个,只是统一的格式
// PacketHeader 消息头,Connnection 客户端相对应的连接,处理的消息的类型 这里是string private void IncomingReqUpMsg(PacketHeader header, Connection connection, string msg) { try {
//如果配置文件不存在,创建一个空的 if (!File.Exists(UPConfigFilePath)) { upgradeConfig = new UpgradeConfig(); upgradeConfig.Save(UPConfigFilePath); } else {
//存在,则加载配置文件到upgradeConfig类中 upgradeConfig = UpgradeConfig.LoadConfig(UPConfigFilePath); } //把服务器端的升级配置文件发给客户端 返回的消息类型是UpgradeConfig 类型需要与客户端中设定的返回类型一致 客户端收到后比较版本号
connection.SendObject("ResUpMsg", upgradeConfig); } catch (Exception ex) { LogTools.LogException(ex, "IncomingReqUpMsg"); } }


客户端收到UpgradeConfig类后,进行判断,如果需要升级,启动升级程序,然后升级程序会请求下载文件

www.networkcomms.cn

www.cnblogs.com/networkcomms 编辑

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

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

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

相关文章:

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

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

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

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

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

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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐