`
wxq594808632
  • 浏览: 262460 次
  • 性别: 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

分享到:
评论

相关推荐

    CS结构自动升级模块(vb.net)

    CS结构自动升级模块是软件开发中的一个重要组成部分,尤其是在桌面应用(Client-Server,简称CS结构)中。VB.NET是一种流行的编程语言,常用于构建这样的应用程序。这个模块的主要目的是确保用户始终运行的是最新...

    面向CS模式下的客户端软件自动升级的实现.rar

    以上是对基于CS模式客户端软件自动升级实现的全面解析,涵盖了从检测更新到安全验证,再到实际升级和用户体验的各个环节。通过理解并应用这些知识点,开发者可以构建出高效、可靠的自动升级系统,为用户提供无缝的...

    用C_实现CS模式下软件自动在线升级

    【C#实现CS模式下软件自动在线升级】 在C/S(Client/Server)架构的软件中,维护性和升级便利性一直是开发者面临的重要挑战。传统的手动升级方式效率低下,且随着软件规模的扩大,升级成本逐渐增加。为了解决这一...

    用C# 实现CS模式下软件自动在线升级.doc

    【C#实现CS模式下软件自动在线升级】 在C/S(Client/Server)模式的应用程序中,由于客户端软件需要在用户设备上安装,因此维护和升级通常是一项挑战。手动升级不仅耗时,而且可能导致用户数据丢失或软件版本不一致...

    用C#实现C/S模式下软件自动在线升级

    在C/S(客户端/服务器)模式下,软件自动在线升级是一项...总之,实现C/S模式下的软件自动在线升级涉及网络请求、XML解析、文件下载和安装等多个步骤。通过合理的代码组织和错误处理,可以为用户提供无缝的更新体验。

    cs系统在线升级

    【cs系统在线升级】是指在Client/Server(C/S)架构的软件中实现自动在线更新的能力。C/S模式的软件在维护、部署和升级方面存在挑战,导致一些企业倾向于选择Browser/Server(B/S)结构。然而,对于那些必须采用C/S模式...

    JAVA CS SWT RCP 在线升级 自动更新 源码

    在Java CS SWT RCP中实现在线升级和自动更新,通常涉及以下几个关键知识点: 1. **SWT**:SWT是Java中的一个图形用户界面(GUI)库,它是Java AWT和Swing的替代品,提供了与操作系统更紧密的集成,提供了更丰富的...

    ASP.NET基于CS结构的企业人事管理系统的设计与实现_project.rar

    综上所述,"ASP.NET基于CS结构的企业人事管理系统"的实现涉及了软件工程的多个方面,包括需求分析、设计、编码、测试和维护。开发者需要掌握ASP.NET框架、.NET Framework、数据库设计以及客户端和服务器端编程等多个...

    winfrom等Cs结构,客户端在线更新程序

    在IT行业中,Windows Forms(通常简称为WinForms)是一种基于.NET Framework的用户界面开发平台,用于构建桌面应用程序。它提供了一种直观的方式...这样的程序能为用户提供无缝的升级体验,提高软件的可靠性和满意度。

    ASP.NET基于CS结构的企业人事管理系统的设计与实现(源代码+论文).zip

    总的来说,ASP.NET基于CS结构的企业人事管理系统设计与实现是一个涵盖了多个IT领域的综合项目,涉及软件工程方法、数据库设计、Web开发技术、用户体验优化以及安全性等多个方面。通过这个项目,开发者不仅能提升技术...

    c# winfrom自动升级,完整源代码例子 fw2.0

    在.NET框架下,C#开发的WinForm应用程序可以利用各种技术实现自动升级功能,以便用户无需手动下载安装新版本。本示例“c# winfrom自动升级,完整源代码例子 fw2.0”提供了一个简单易懂的方法,适用于C# WinForm应用...

    电信设备-一种基于CS结构的织物疵点检测信息管理系统.zip

    总结,这种基于CS结构的织物疵点检测信息管理系统利用先进的信息技术,实现了纺织生产中的自动化疵点检测和信息管理,对提升产品质量、优化生产流程具有重要意义。同时,系统的设计和实施充分考虑了行业特性、用户...

    omron-cs1d

    - **软件资产共用**:无论是CS1还是CJ1系列,它们之间可以共享支持软件及程序代码,简化了维护与升级过程。 - **模块通用性**:CS系列的各种I/O模块可在CS1D双工系统中通用,这不仅简化了系统的维护工作,也降低了...

    基于CS结构的图书销售系统 使用VS2008+ACCESS开发 功能强大 包括库存、销售统计和客户关系管理功能

    总结,基于CS结构的图书销售系统通过VS2008和ACCESS的结合,实现了图书行业的高效管理。系统的每个模块都紧密围绕着图书销售的核心业务,旨在通过信息化手段提升整体运营效率,同时也为未来的扩展和升级留有空间。...

    基于cs结构的仓库智能管理系统毕业论文.doc

    《基于CS结构的仓库智能管理系统》是一篇关于利用面向对象技术设计和开发仓库管理软件的毕业论文。本文主要探讨了如何运用C/S(客户端/服务器)架构构建一个智能化的仓库管理系统,涵盖了系统从构思到实际应用的全...

    横河cs1000 DCS全部随机资料3.rar

    10. **升级与扩展**:横河CS1000系统设计时考虑到了未来扩展的可能性,允许用户根据需要添加新的硬件和软件模块。 压缩包内的"S1B3001"可能代表一个特定的系统部分或者项目编号,具体的内容可能涉及该部分的详细...

    C#aspnet自动更新升级工具源码

    自动升级工具的核心功能是检查服务器上的新版本,并在发现更新时下载并安装。`AppUpdater.cs` 文件很可能是实现这一功能的关键类。它可能包含了检查更新、下载文件、安装更新等逻辑。 3. **XML 文件处理**: `Xml...

    C/S结构的在线考试系统

    【C/S结构的在线考试系统】是一种传统的客户端-服务器(Client/Server,简称C/S)架构的软件应用,尤其在教育信息化领域中被广泛应用。在这个系统中,客户端(通常是用户计算机上的应用程序)与服务器端(负责数据...

    软件体系结构课后习题参考答案.pdf

    基于体系结构的软件开发模型,如基于构件的开发模型和基于体系结构的开发模型,强调以软件体系结构为核心,以构件为基础,通过迭代增量方式进行设计和实现。这种模型的优势在于提高了软件开发效率,通过构件复用简化...

Global site tag (gtag.js) - Google Analytics