程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> CS結構軟件自動升級實現(二)

CS結構軟件自動升級實現(二)

編輯:關於JAVA

本實現包括:

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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved