CS结构软件自动升级实现(一)
2012-10-16 13:04:24 ycb1689 阅读数 1055 文章标签: file工具htmlencoding服务器border 更多
分类专栏: Swing
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/ycb1689/article/details/8076637
前段时间做了一个工具发布给公司的各部门使用后反馈了不少BUG,每次修改后均需要发邮件通知各用户替换最新版本,很不方便,因此后来就写了一个自动升级的功能,这样每次发布新的版本时只需要将其部署到自动升级服务器上,工具使用用户运行工具时就会连接到自动升级服务器,检查是否有版本更新,如果有则完成更新后再运行最新版本,否则就运行当前工具版本。
为了使这个自动升级模块具有通用性,我将其做成可以单独运行的程序,而并非集成到工具中,这样则可以为各类软件提供自动升级的功能。自动升级模块采用SOCKET方式实现升级客户端与服务端的交互,通过版本控制文件autoupdate.xml来控制版本的更新,完成自动更新后会将历史清单history.htm也发送给客户端,并自动打开该文件,使用户可以对本次升级的具体内容一目了然。
详细实现:
autoupdate.xml具体内容:
Xml代码
-
<?xml version="1.0" encoding="GBK"?>
-
<Info>
-
<Version>1.0.3</Version>
-
<UpdateServer>
-
<Ip>122.2.14.212</Ip>
-
<Port>2110</Port>
-
</UpdateServer>
-
<Files>
-
<File>
-
<Name>mftest.jar</Name>
-
<Path>.\bin</Path>
-
<SubVer>1.0.0.3</SubVer>
-
</File>
-
<File>
-
<Name>run.bat</Name>
-
<Path>.</Path>
-
<SubVer>1.0.0.3</SubVer>
-
</File>
-
<File>
-
<Name>eglreco.fix</Name>
-
<Path>.\config\resource</Path>
-
<SubVer>1.0.0.0</SubVer>
-
</File>
-
<File>
-
<Name>eglrec.fix</Name>
-
<Path>.\config\resource</Path>
-
<SubVer>1.0.0.0</SubVer>
-
</File>
-
<File>
-
<Name>dom4j-1.6.1.jar</Name>
-
<Path>.\lib</Path>
-
<SubVer>1.0.0.0</SubVer>
-
</File>
-
<File>
-
<Name>jaxen-1.1-beta-4.jar</Name>
-
<Path>.\lib</Path>
-
<SubVer>1.0.0.0</SubVer>
-
</File>
-
<File>
-
<Name>jxl.jar</Name>
-
<Path>.\lib</Path>
-
<SubVer>1.0.0.0</SubVer>
-
</File>
-
</Files>
-
</Info>
其中UpdateServer用户描述服务端的IP和端口;Version为软件的大版本号,Files为软件涉及到的文件,其中的SubVer为具体文件的版本号,其他就顾名思义了。
history.htm具体内容:
Html代码
-
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-
<html>
-
<head>
-
<title>XXX软件更新历史</title>
-
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
-
<style type="text/css">
-
BODY,TABLE {}{
-
FONT-SIZE: 12px;
-
COLOR: #666666;
-
FONT-FAMILY: 宋体;
-
background-color: #ffffff;
-
line-height: 160%;}
-
</style>
-
</head>
-
<body>
-
<table width="600" border="1" align="center" cellpadding="2" cellspacing="0">
-
<tr bgcolor="#ECECEC">
-
<td align="center" width=50>版本</td>
-
<td align="center" width=470>更新内容</td>
-
<td align="center" width=80>日期</td>
-
</tr>
-
<tr>
-
<td align="center" >1.0.3</td>
-
<td ><p>1.实现自动升级功能<br>
-
2.增加版本号显示<br>
-
3.修正.<br>
-
</p>
-
</td>
-
<td align="center" >2008-12-25</td>
-
</tr>
-
<tr>
-
<td align="center" >1.0.2</td>
-
<td ><p>1.修正了等字符而无法正确生成的错误<br>
-
2.修正了无法生成的错误<br>
-
</p>
-
</td>
-
<td align="center" >2008-12-20</td>
-
</tr>
-
<tr>
-
<td align="center" >1.0.1</td>
-
<td ><p>1.增加通过<br>
-
2.修正因为的错误<br>
-
</p>
-
</td>
-
<td align="center" >2008-12-15</td>
-
</tr>
-
<tr>
-
<td align="center" >1.0.0</td>
-
<td ><p>1.实现通过.功能<br>
-
2.实现通过.功能<br>
-
</p>
-
</td>
-
<td align="center" >2008-12-11</td>
-
</tr>
-
</table>
-
</body>
-
</html>
工作原理:
自动升级客户端首先会将本地的autoupdate.xml内容发送给服务端,服务端收到客户端的版本信息后与服务端本地的版本信息(autoupdate.xml)进行比较,首先比较Version,如果一致则通知客户端无需更新,如果不一致则检查Files中各文件的SubVer,服务端将SubVer不一致的文件发送给客户端,对于服务端有而客户端没有的文件也需要发送给客户端,处理完所有File后,服务端将本地的history.htm与传送给客户端,并通知客户端更新完毕;客户端收到更新完毕后的应答后自动打开history.htm,将更新历史信息显示给用户查看。