rochoc

          關于java、cobol、zos

            BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
            6 Posts :: 1 Stories :: 21 Comments :: 0 Trackbacks
          上次寫完(一)實現總體說明后,一直想把源碼放上來,但一直沒有時間,今天趁周末把這個寫完整,今天主要是附上實現源碼,供有需要的朋友參考,當然也希望大家多多指教。上篇文章講到了這個實現是基于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 :
            1/********************************************************************
            2 * 項目名稱                :rochoc<p>
            3 * 包名稱                  :com.rochoc.autoupdate<p>
            4 * 文件名稱                :AutoUpdProtocol.java<p>
            5 * 編寫者                 :kfzx-luoc<p>
            6 * 編寫日期                :2008-12-22<p>
            7 * 程序功能(類)描述    :<p>
            8 * 定義自動升級客戶端與服務端的通訊協議
            9 * 程序變更日期            :
           10 * 變更作者                :
           11 * 變更說明                :
           12********************************************************************/

           13package com.rochoc.autoupdate;
           14
           15/**
           16 * @author kfzx-luoc
           17 *
           18 * TODO To change the template for this generated type comment go to
           19 * Window - Preferences - Java - Code Style - Code Templates
           20 */

           21public class AUPD
           22{
           23    /**
           24     * 無意義操作
           25     */

           26    public static final String NONE = "NONE    ";
           27    
           28    /**
           29     * 發送客戶端版本信息
           30     */

           31    public static final String SEND_CLIENT_VERSION = "SENDCVER";
           32    
           33    /**
           34     * 接收客戶端版本信息
           35     */

           36    public static final String RECEIVED_CLIENT_VERSION = "RECDCVER";
           37    
           38    /**
           39     * 發送文件全路徑
           40     */

           41    public static final String SEND_FILE_ABSOULT = "SENDFILE";
           42    
           43    /**
           44     * 接收文件全路徑
           45     */

           46    public static final String RECEIVED_FILE_ABSOULT = "RECDFILE";
           47    
           48    /**
           49     * 開始文件傳輸
           50     */

           51    public static final String START_TRANSMIT = "STARTTSM";
           52    
           53    /**
           54     * 結束文件傳輸
           55     */

           56    public static final String TERMINATE_TRANSMIT = "TERMTSMT";
           57    
           58    /**
           59     * 更新失敗
           60     */

           61    public static final String UPDATED_FAILURE = "UPDEFAIL";
           62    
           63    /**
           64     * 更新成功
           65     */

           66    public static final String UPDATED_SUCCESSFUL = "UPDESUCC";
           67    
           68    /**
           69     * 無需更新
           70     */

           71    public static final String NOTNEED_UPDATED = "NNEEDUPD";
           72    
           73    /**
           74     * 已經準備好接收更新文件
           75     */

           76    public static final String READY_TO_UPDATE = "READYTUP";
           77    
           78    /**
           79     * 結束鏈接
           80     */

           81    public static final String BYE = "BYEBYEOK";
           82    
           83    /**
           84     * 數據區OFFSET
           85     */

           86    public static final int DATA_OFFSET = 5;    
           87
           88    /**
           89     * 文件數據塊大小
           90     */

           91    public static final int DATA_SIZE = 1024;
           92
           93    /**
           94     * 發送緩沖區大小
           95     */

           96    public static final int BUFFER_SIZE = DATA_SIZE + 1 + 4// [0]位是標志位,區分數據和命令 + 4位長度
           97
           98    /**
           99     * 數據段標識
          100     */

          101    public static final int MARK_DATA_SECT = 0;
          102    /**
          103     * 命令段標識
          104     */

          105    public static final int CMD_DATA_SECT = 1;
          106
          107    /**
          108     * 數據段結束標識
          109     */

          110    public static final int MARK_DATA_END = 127;
          111}

          112

          AutoUpdateServer.java :
            1/********************************************************************
            2 * 項目名稱                :rochoc<p>
            3 * 包名稱                  :com.rochoc.autoupdate<p>
            4 * 文件名稱                :AutoUpdateServer.java<p>
            5 * 編寫者                 :kfzx-luoc<p>
            6 * 編寫日期                :2008-12-22<p>
            7 * 程序功能(類)描述    :<p>
            8 * 自動更新服務端
            9 * 程序變更日期            :
           10 * 變更作者                :
           11 * 變更說明                :
           12********************************************************************/

           13package com.rochoc.autoupdate;
           14
           15import java.io.IOException;
           16import java.net.ServerSocket;
           17import java.net.Socket;
           18
           19/**
           20 * @author kfzx-luoc
           21 *
           22 * TODO To change the template for this generated type comment go to
           23 * Window - Preferences - Java - Code Style - Code Templates
           24 */

           25public class AutoUpdateServer extends Thread
           26{
           27    private int port = 0;//服務端口號
           28    private Config config = Config.getInstance();//配置文件對像
           29    private ServerSocket srvSocket = null;
           30    public AutoUpdateServer()
           31    {
           32        port = Integer.parseInt(config.getServerPort());
           33        try
           34        {
           35            srvSocket = new ServerSocket(port);
           36            //setTimeout(60000);
           37            this.start();
           38            Config.print("自動更新服務器在端口'"+port+"'監聽");
           39        }
           catch (IOException e)
           40        {
           41            e.printStackTrace();
           42        }

           43    }

           44    void setTimeout(int millis) throws IOException
           45    {
           46        if (srvSocket != null)
           47        {
           48            srvSocket.setSoTimeout(millis);
           49        }

           50    }

           51    void close() throws IOException
           52    {
           53        if (srvSocket != null)
           54        {
           55            srvSocket.close();
           56        }

           57    }

           58    /**
           59     * @author kfzx-luoc
           60     *
           61     * 執行監聽處理,如果有客戶端連接上來,則判斷是否需要更新,
           62     * 如果需要更新,則給客戶端傳送最新版本文件
           63     */

           64    public void run()
           65    {
           66        try
           67        {
           68            while (true
           69            {
           70                Socket clSocket = null;
           71                try
           72                {
           73                    clSocket = srvSocket.accept();
           74                    Config.print("客戶端‘"+clSocket.getInetAddress()+"’連接成功");
           75                    //進行處理
           76                    AUpdSrvProc srvP = new AUpdSrvProc(clSocket);
           77                    srvP.start();
           78                }
           catch (IOException ioe)
           79                {
           80                    try
           81                    {
           82                        clSocket.close();
           83                    }
           catch (IOException e1)
           84                    {
           85                    }

           86                    Config.print("AutoUpdateServer proc client:"+clSocket.getInetAddress().getHostAddress()+" error,"+ioe);
           87                    ioe.printStackTrace();
           88                }

           89            }

           90        }
          catch(Exception e)
           91        {
           92            Config.print("AutoUpdateServer running error,"+e);
           93            e.printStackTrace();
           94        }
           finally
           95        {
           96            try
           97            {
           98                srvSocket.close();
           99            }
           catch (IOException e)
          100            {
          101            }

          102        }

          103    }
              
          104    //測試主函數
          105    public static void main(String args[])
          106    {
          107        AutoUpdateServer server = new AutoUpdateServer();
          108        server.run();
          109    }

          110}

          111

          避免太大,其他源碼見(三)

          運行服務端:
          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

          posted on 2009-01-09 21:18 rochoc 閱讀(2916) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 宁陕县| 甘孜县| 临桂县| 科技| 岢岚县| 西城区| 德化县| 巴里| 抚宁县| 利川市| 昭觉县| 裕民县| 襄汾县| 宁城县| 通化县| 丽水市| 松溪县| 清流县| 揭阳市| 安庆市| 休宁县| 杭锦旗| 建昌县| 宁河县| 宣威市| 东乡族自治县| 铜陵市| 玛沁县| 汝阳县| 滦平县| 定日县| 辰溪县| 正镶白旗| 墨脱县| 乾安县| 泰宁县| 武山县| 苍山县| 乐至县| 房产| 珲春市|