<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    rochoc

    關(guān)于java、cobol、zos

      BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
      6 Posts :: 1 Stories :: 21 Comments :: 0 Trackbacks
    上次寫完(一)實(shí)現(xiàn)總體說明后,一直想把源碼放上來,但一直沒有時(shí)間,今天趁周末把這個(gè)寫完整,今天主要是附上實(shí)現(xiàn)源碼,供有需要的朋友參考,當(dāng)然也希望大家多多指教。上篇文章講到了這個(gè)實(shí)現(xiàn)是基于SOCKET實(shí)現(xiàn)的,當(dāng)然通訊協(xié)議是自定義,上一篇也有朋友說采用http協(xié)議比較簡(jiǎn)單,當(dāng)然這個(gè)也是一種方法,但要使用http協(xié)議,則服務(wù)端要有http服務(wù)這樣會(huì)導(dǎo)致服務(wù)端過于龐大。

    本實(shí)現(xiàn)包括:
    1、AUPD.java  服務(wù)端和客戶端之間的通訊協(xié)議
    2、AutoUpdateServer.java 服務(wù)端的監(jiān)聽進(jìn)程
    3、AUpdSrvProc.java服務(wù)端的服務(wù)線程,用于處理客戶端的自動(dòng)升級(jí)請(qǐng)求
    4、ClientVerParser.java服務(wù)端服務(wù)線程用于解決客戶端版本信息的類
    5、AutoUpdateClient.java客戶端的自動(dòng)升級(jí)請(qǐng)求進(jìn)程
    6、Config.java用于服務(wù)端和客戶端讀取本地配制文件的類
    7、UpdFile.java用于文件傳輸?shù)奈募?duì)像
    本實(shí)現(xiàn)用dom4j作為解釋xml的引擎

    AUPD.java :
      1/********************************************************************
      2 * 項(xiàng)目名稱                :rochoc<p>
      3 * 包名稱                  :com.rochoc.autoupdate<p>
      4 * 文件名稱                :AutoUpdProtocol.java<p>
      5 * 編寫者                 :kfzx-luoc<p>
      6 * 編寫日期                :2008-12-22<p>
      7 * 程序功能(類)描述    :<p>
      8 * 定義自動(dòng)升級(jí)客戶端與服務(wù)端的通訊協(xié)議
      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     * 發(fā)送客戶端版本信息
     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     * 發(fā)送文件全路徑
     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     * 結(jié)束文件傳輸
     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     * 已經(jīng)準(zhǔn)備好接收更新文件
     75     */

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

     81    public static final String BYE = "BYEBYEOK";
     82    
     83    /**
     84     * 數(shù)據(jù)區(qū)OFFSET
     85     */

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

     91    public static final int DATA_SIZE = 1024;
     92
     93    /**
     94     * 發(fā)送緩沖區(qū)大小
     95     */

     96    public static final int BUFFER_SIZE = DATA_SIZE + 1 + 4// [0]位是標(biāo)志位,區(qū)分?jǐn)?shù)據(jù)和命令 + 4位長(zhǎng)度
     97
     98    /**
     99     * 數(shù)據(jù)段標(biāo)識(shí)
    100     */

    101    public static final int MARK_DATA_SECT = 0;
    102    /**
    103     * 命令段標(biāo)識(shí)
    104     */

    105    public static final int CMD_DATA_SECT = 1;
    106
    107    /**
    108     * 數(shù)據(jù)段結(jié)束標(biāo)識(shí)
    109     */

    110    public static final int MARK_DATA_END = 127;
    111}

    112

    AutoUpdateServer.java :
      1/********************************************************************
      2 * 項(xiàng)目名稱                :rochoc<p>
      3 * 包名稱                  :com.rochoc.autoupdate<p>
      4 * 文件名稱                :AutoUpdateServer.java<p>
      5 * 編寫者                 :kfzx-luoc<p>
      6 * 編寫日期                :2008-12-22<p>
      7 * 程序功能(類)描述    :<p>
      8 * 自動(dòng)更新服務(wù)端
      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;//服務(wù)端口號(hào)
     28    private Config config = Config.getInstance();//配置文件對(duì)像
     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("自動(dòng)更新服務(wù)器在端口'"+port+"'監(jiān)聽");
     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     * 執(zhí)行監(jiān)聽處理,如果有客戶端連接上來,則判斷是否需要更新,
     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                    //進(jìn)行處理
     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    //測(cè)試主函數(shù)
    105    public static void main(String args[])
    106    {
    107        AutoUpdateServer server = new AutoUpdateServer();
    108        server.run();
    109    }

    110}

    111

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

    運(yùn)行服務(wù)端:
    java -cp .;.\bin;.\lib\dom4j-1.6.1.jar;.\lib\jaxen-1.1-beta-4.jar com.icbc.autoupdate.AutoUpdateServer
    運(yùn)行客戶端:
    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 閱讀(2912) 評(píng)論(0)  編輯  收藏

    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 女人被男人躁的女爽免费视频| 日韩免费精品视频| 最近2019免费中文字幕6| 1000部羞羞禁止免费观看视频| 九九九精品成人免费视频| 日韩免费视频播放| 亚洲综合精品香蕉久久网| 亚洲精品天天影视综合网| 最新国产成人亚洲精品影院| 美女视频黄.免费网址| 日本免费久久久久久久网站| 91在线视频免费看| 亚洲成人国产精品| 亚洲AV日韩AV永久无码免下载| 亚洲小视频在线播放| 国产AV无码专区亚洲AV蜜芽| 精品乱子伦一区二区三区高清免费播放 | selaoban在线视频免费精品| 久久99热精品免费观看动漫| 24小时免费直播在线观看| 国产gv天堂亚洲国产gv刚刚碰| 亚洲国产精品线观看不卡| 国产精品成人亚洲| 99国产精品免费视频观看| 日本免费网站在线观看| 亚洲成a人片在线观看日本| 亚洲影院天堂中文av色| 国产真人无码作爱视频免费| 成年女人免费视频播放77777 | 亚洲国产一区明星换脸| 亚洲无线一二三四区| 深夜特黄a级毛片免费播放| 精品国产免费人成电影在线观看| 免费成人午夜视频| 亚洲国产成人无码av在线播放| 免费在线人人电影网| 国产免费不卡v片在线观看| 夜夜春亚洲嫩草影院| 亚洲国产成人久久一区二区三区| 大地资源在线资源免费观看| 国产国产人免费人成免费视频|