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

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

2015-02-02 14:07 1076 查看

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



每次升级,客户端都会获取服务器端存放在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网络通信的自动升级程序源码分析-客户端接收文件

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