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

    本實(shí)現(xiàn)包括:
    1、AUPD.java  服務(wù)端和客戶端之間的通訊協(xié)議
    2、AutoUpdateServer.java 服務(wù)端的監(jiān)聽(tīng)進(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 * 變更說(shuō)明                :
     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     * 無(wú)意義操作
     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     * 開(kāi)始文件傳輸
     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     * 無(wú)需更新
     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 * 變更說(shuō)明                :
     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)聽(tīng)");
     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)聽(tīng)處理,如果有客戶端連接上來(lái),則判斷是否需要更新,
     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

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

    運(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 閱讀(2913) 評(píng)論(0)  編輯  收藏

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


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 亚洲乱码中文字幕综合| 成人AV免费网址在线观看| 国产午夜免费福利红片| 亚洲色大18成人网站WWW在线播放| 最好看的中文字幕2019免费| 亚洲不卡中文字幕无码| 最近更新免费中文字幕大全| 亚洲中文字幕无码一区二区三区| 国产男女爽爽爽免费视频 | 亚洲最大AV网站在线观看| jizz免费在线影视观看网站| 国产精品xxxx国产喷水亚洲国产精品无码久久一区 | 亚洲gv白嫩小受在线观看| 免费精品99久久国产综合精品| 五月天网站亚洲小说| 一色屋成人免费精品网站| 亚洲天然素人无码专区| 四虎影视永久免费观看网址| www成人免费视频| 久久亚洲成a人片| 中文字幕人成无码免费视频| 国产成人精品久久亚洲高清不卡| 免费观看午夜在线欧差毛片 | 香蕉97碰碰视频免费| 久久亚洲2019中文字幕| 无码AV片在线观看免费| 亚洲午夜精品一区二区麻豆| 国产午夜鲁丝片AV无码免费| 精精国产www视频在线观看免费| 日韩亚洲AV无码一区二区不卡 | 亚洲AV成人一区二区三区观看| 亚洲精品无码久久毛片| 久久九九兔免费精品6| 色窝窝亚洲AV网在线观看| 亚洲爆乳无码专区| 处破痛哭A√18成年片免费| 一区二区三区免费电影| 亚洲精品综合久久中文字幕| 国产精品国产免费无码专区不卡| 免费看黄的成人APP| 亚洲色大情网站www|