`
wxq594808632
  • 浏览: 260388 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

CS结构软件自动升级实现(二)

阅读更多

原文:http://www.blogjava.net/rochoc/archive/2009/01/09/250739.html

 

上次写完(一)实现总体说明后,一直想把源码放上来,但一直没有时间,今天趁周末把这个写完整,今天主要是附上实现源码,供有需要的朋友参考,当然也希望大家多多指教。上篇文章讲到了这个实现是基于SOCKET实现的,当然通讯协议是自定义,上一篇也有朋友说采用http协议比较简单,当然这个也是一种方法,但要使用http协议,则服务端要有http服务这样会导致服务端过于庞大。

本实现包括:
1、AUPD.java  服务端和客户端之间的通讯协议
2、AutoUpdateServer.java 服务端的监听进程
3、AUpdSrvProc.java服务端的服务线程,用于处理客户端的自动升级请求
4、ClientVerParser.java服务端服务线程用于解决客户端版本信息的类
5、AutoUpdateClient.java客户端的自动升级请求进程
6、Config.java用于服务端和客户端读取本地配制文件的类
7、UpdFile.java用于文件传输的文件对像
本实现用dom4j作为解释xml的引擎

 

AUPD.java :

/** *//********************************************************************
   * 项目名称                :rochoc<p>
   * 包名称                  :com.rochoc.autoupdate<p>
   * 文件名称                :AutoUpdProtocol.java<p>
   * 编写者                 :kfzx-luoc<p>
   * 编写日期                :2008-12-22<p>
   * 程序功能(类)描述    :<p>
   * 定义自动升级客户端与服务端的通讯协议
   * 程序变更日期            :
  * 变更作者                :
  * 变更说明                :
 ********************************************************************/
 package com.rochoc.autoupdate;
 
 /** *//**
  * @author kfzx-luoc
  *
  * TODO To change the template for this generated type comment go to
  * Window - Preferences - Java - Code Style - Code Templates
  */
 public class AUPD
 {
     /** *//**
      * 无意义操作
      */
     public static final String NONE = "NONE    ";
     
     /** *//**
      * 发送客户端版本信息
      */
     public static final String SEND_CLIENT_VERSION = "SENDCVER";
     
     /** *//**
      * 接收客户端版本信息
      */
     public static final String RECEIVED_CLIENT_VERSION = "RECDCVER";
     
     /** *//**
      * 发送文件全路径
      */
     public static final String SEND_FILE_ABSOULT = "SENDFILE";
     
     /** *//**
      * 接收文件全路径
      */
     public static final String RECEIVED_FILE_ABSOULT = "RECDFILE";
     
     /** *//**
      * 开始文件传输
      */
     public static final String START_TRANSMIT = "STARTTSM";
     
     /** *//**
      * 结束文件传输
      */
     public static final String TERMINATE_TRANSMIT = "TERMTSMT";
     
     /** *//**
      * 更新失败
      */
     public static final String UPDATED_FAILURE = "UPDEFAIL";
     
     /** *//**
      * 更新成功
      */
     public static final String UPDATED_SUCCESSFUL = "UPDESUCC";
    
     /** *//**
      * 无需更新
      */
     public static final String NOTNEED_UPDATED = "NNEEDUPD";
     
     /** *//**
      * 已经准备好接收更新文件
      */
     public static final String READY_TO_UPDATE = "READYTUP";
     
     /** *//**
      * 结束链接
      */
     public static final String BYE = "BYEBYEOK";
     
     /** *//**
      * 数据区OFFSET
      */
     public static final int DATA_OFFSET = 5;    
 
     /** *//**
      * 文件数据块大小
      */
     public static final int DATA_SIZE = 1024;
 
     /** *//**
      * 发送缓冲区大小
      */
     public static final int BUFFER_SIZE = DATA_SIZE + 1 + 4; // [0]位是标志位,区分数据和命令 + 4位长度
 
     /** *//**
      * 数据段标识
     */
    public static final int MARK_DATA_SECT = 0;
    /** *//**
     * 命令段标识
     */
    public static final int CMD_DATA_SECT = 1;

    /** *//**
     * 数据段结束标识
     */
    public static final int MARK_DATA_END = 127;
}

 

AutoUpdateServer.java :

 

/** *//********************************************************************
   * 项目名称                :rochoc<p>
   * 包名称                  :com.rochoc.autoupdate<p>
   * 文件名称                :AutoUpdateServer.java<p>
   * 编写者                 :kfzx-luoc<p>
   * 编写日期                :2008-12-22<p>
   * 程序功能(类)描述    :<p>
   * 自动更新服务端
   * 程序变更日期            :
  * 变更作者                :
  * 变更说明                :
 ********************************************************************/
 package com.rochoc.autoupdate;
 
 import java.io.IOException;
 import java.net.ServerSocket;
 import java.net.Socket;
 
 /** *//**
  * @author kfzx-luoc
  *
  * TODO To change the template for this generated type comment go to
  * Window - Preferences - Java - Code Style - Code Templates
  */
 public class AutoUpdateServer extends Thread
 {
     private int port = 0;//服务端口号
     private Config config = Config.getInstance();//配置文件对像
     private ServerSocket srvSocket = null;
     public AutoUpdateServer()
     {
         port = Integer.parseInt(config.getServerPort());
         try
         {
             srvSocket = new ServerSocket(port);
             //setTimeout(60000);
             this.start();
             Config.print("自动更新服务器在端口'"+port+"'监听");
         } catch (IOException e)
         {
             e.printStackTrace();
         }
     }
     void setTimeout(int millis) throws IOException
     {
         if (srvSocket != null)
         {
             srvSocket.setSoTimeout(millis);
         }
     }
     void close() throws IOException
     {
         if (srvSocket != null)
         {
             srvSocket.close();
         }
    }
     /** *//**
      * @author kfzx-luoc
      *
      * 执行监听处理,如果有客户端连接上来,则判断是否需要更新,
      * 如果需要更新,则给客户端传送最新版本文件
      */
     public void run()
     {
         try
        {
             while (true) 
             {
                 Socket clSocket = null;
                 try
                 {
                     clSocket = srvSocket.accept();
                     Config.print("客户端‘"+clSocket.getInetAddress()+"’连接成功");
                     //进行处理
                     AUpdSrvProc srvP = new AUpdSrvProc(clSocket);
                     srvP.start();
                 } catch (IOException ioe)
                 {
                     try
                     {
                         clSocket.close();
                     } catch (IOException e1)
                     {
                     }
                     Config.print("AutoUpdateServer proc client:"+clSocket.getInetAddress().getHostAddress()+" error,"+ioe);
                     ioe.printStackTrace();
                 }
             }
         }catch(Exception e)
         {
             Config.print("AutoUpdateServer running error,"+e);
             e.printStackTrace();
         } finally
         {
             try
             {
                 srvSocket.close();
             } catch (IOException e)
            {
            }
        }
    }    
    //测试主函数
    public static void main(String args[])
    {
        AutoUpdateServer server = new AutoUpdateServer();
        server.run();
    }
}

 

避免太大,其他源码见(三)

运行服务端:
java -cp .;.\bin;.\lib\dom4j-1.6.1.jar;.\lib\jaxen-1.1-beta-4.jar com.icbc.autoupdate.AutoUpdateServer
运行客户端:
java -cp ./bin;./lib/jaxen-1.1-beta-4.jar;./lib/dom4j-1.6.1.jar; com.icbc.autoupdate.AutoUpdateClient

分享到:
评论

相关推荐

    MopacPro 量子化学 计算软件

    MOPAC模块:单点、几何优化、振动频率和COSMO实现并行,周期边界条件。 操作平台:Unix/Linux/Windows Mopac 2002 (通用半经验量子力学程序) 【URL】 http://www.cachesoftware.com/mopac/index.shtml ...

    红蜘蛛网络教室.rar

    捆绑一般电子教室软件没有的网络考试和在线考试系统,实现自动评分的无纸化考试; B/S结构的考试系统,出卷和考试都在浏览器上完成,所有用户之间还能共享和交换试卷; 用户可以使用软件厂商提供的考试服务器,无须...

    红蜘蛛多媒体网络教室v7.0版(build 1189)

    捆绑一般电子教室软件没有的网络考试和在线考试系统,实现自动评分的无纸化考试; B/S结构的考试系统,出卷和考试都在浏览器上完成,所有用户之间还能共享和交换试卷; 用户可以自行搭建考试服务器,也可以使用软件...

    红蜘蛛多媒体网络教室v7.2版 build 1208

    捆绑一般电子教室软件没有的网络考试和在线考试系统,实现自动评分的无纸化考试; B/S结构的考试系统,出卷和考试都在浏览器上完成,所有用户之间还能共享和交换试卷; 用户可以使用软件厂商提供的考试服务器,无须...

    asp.net知识库

    HttpModule 实现 ASP.Net (*.aspx) 中文简繁体的自动转换,不用修改原有的任何代码,直接部署即可! 服务器自定义开发二之客户端脚本回发 Web开发: 使用URL重写WEB主题切换 如何在Asp.Net1.1中实现页面模板(所谓的...

    红蜘蛛多媒体网络教室安装包和破解补丁

    红蜘蛛软件主要在局域网络上实现多媒体信息的教学广播,是一款实现在电子教室、多媒体网络教室或者电脑教室中进行多媒体网络教学的非常好的软件产品,集电脑教室的同步教学、控制、管理、音视频广播、网络考试等功能...

    深度学习(asp)网址导航系统 3.1.2(最新更新完美版)

    ·重构前台样式实现程序换肤功能,方便二次开发网站界面模板 ver2.5.4 ·完善数据库在线管理,实现在线备份恢复压缩及SQL语句执行 ·后台友情链接增加图片上传功能 ·后台登陆文件和校验文件整合精简为一个文件 ·...

    C#微软培训资料

    15.4 接口的实现 .182 15.5 抽象类与接口 .195 15.6 小 结 .196 第十六章 组织应用程序 .198 16.1 基 本 概 念 .198 16.2 使用名字空间 .200 16.3 使用指示符 .203 16.4 程 序 示 例 .206 16.5 小 ...

    超级有影响力霸气的Java面试题大全文档

    抽象包括两个方面,一是过程抽象,二是数据抽象。 2.继承:  继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承...

    java 面试题 总结

    抽象包括两个方面,一是过程抽象,二是数据抽象。 2.继承: 继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类...

    网吧维护技术资料 合集

    7482 网吧维护\资料\xp实用技巧\升级到Windows XP应该考虑的6个方面.txt 2586 网吧维护\资料\xp实用技巧\双剑合璧 在Win XP下刻录音乐CD.txt 455 网吧维护\资料\xp实用技巧\取消WinXP专业版中的保留的带宽.txt 6217 ...

    易语言模块914个

    cs.ec DES加密模块 1.0.ec DIY热键框模块.ec DLL注入模块.ec DOS命令模块.ec EC.EC EdbServer1.0客户端.ec EDB、高级表格、XLS互换.ec edb到html-1.0.ec EDB数据库客户端模块 1.0.ec edb数据库转Excel...

    1345个易语言模块

    二进制到三十六进制.ec 互 联网扩展模块1.1.ec 互联网扩展模块1[1].1.ec 五笔编码查询模块.ec 代码编辑器部分模块.ec 仿 vista截图.ec 仿WinXP窗口v3.1版.ec 仿XP界面3.0特别版模块 3.0.ec 仿XP窗口2.0.ec 仿 真...

    1350多个精品易语言模块

    二进制到三十六进制.ec 互 联网扩展模块1.1.ec 互联网扩展模块1[1].1.ec 五笔编码查询模块.ec 代码编辑器部分模块.ec 仿 vista截图.ec 仿WinXP窗口v3.1版.ec 仿XP界面3.0特别版模块 3.0.ec 仿XP窗口2.0.ec 仿 真...

    入门学习Linux常用必会60个命令实例详解doc/txt

    install命令的作用是安装或升级软件或备份数据,它的使用权限是所有用户。 2.格式 (1)install [选项]... 来源 目的地 (2)install [选项]... 来源... 目录 (3)install -d [选项]... 目录... 在前两种格式中,会...

    海康视频卡动态库

    using System; using System.Collections.Generic; using System.Text; using System.ComponentModel; using System.Data; using System.Drawing;...using System.Windows.Forms;...using System.Runtime.InteropServices;...

    1000个【易语言模块大全汇总批量下载】

    2004-08-11 00:34 1667 598 易语言模块大全\cs.ec 2005-10-21 15:30 4047 1417 易语言模块大全\DES加密模块 1.0.ec 2005-08-06 14:55 12387 3460 易语言模块大全\DIY热键框模块.ec 2005-10-21 15:30 10219 3288 ...

    E语言1000模块

    2004-08-11 00:34 1667 598 易语言模块大全\cs.ec 2005-10-21 15:30 4047 1417 易语言模块大全\DES加密模块 1.0.ec 2005-08-06 14:55 12387 3460 易语言模块大全\DIY热键框模块.ec 2005-10-21 15:30 10219 3288 ...

Global site tag (gtag.js) - Google Analytics