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

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

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

    Rex Mao

    分享java技術與生活

    2007年11月3日 #

    關于留言

    由于留言的提示郵件會被標記為垃圾郵件, 所以很多留言我沒能發現并回復。
    如果有問題要討論,請大家直接發郵件到郵箱rex_mao@hotmail.com。

    另外,如果需要源程序,可聯系購買,也可提供程序擴展開發。

    謝謝。

    posted @ 2008-05-24 01:04 Rex Mao| 編輯 收藏

    Oracle SQLPLUS 常用命令小結(一)


    1. 顯示當前連接。

    SQL:
            SELECT *                                                                                                                                                 
            FROM V$SESSION                                                                                                                                 
            WHERE STATUS = 'INACTIVE'                                                                                                             
            AND USERNAME IS NOT NULL;                                                                                                         


    2. 強制關閉用戶的連接

    SQL:
        a) SELECT USERNAME, SID, SERIAL#                                                                                                   
            FROM V$SESSION                                                                                                                                 
            WHERE STATUS = 'INACTIVE'                                                                                                             
            AND USERNAME IS NOT NULL;                                                                                                         
                                                                                                                                                                              
        b) ALTER SYSTEM KILL SESSION 'SID, SERIAL#'; --SID 和 SERIAL#是在步驟a)中得到的結果。


    3. 從返回的結果中選擇第m到n條記錄

    SQL:
            SELECT *                                                                                                                                                   
            FROM (                                                                                                                                                      
                         SELECT A.*, ROWNUM RN                                                                                                       
                         FROM (                                                                                                                                         
                                       SELECT *                                                                                                                        
                                       FROM YOURTABLE --這里請用你的SELECT語句代替                                            
                                      ) A                                                                                                                                     
                         WHERE ROWNUM <= n                                                                                                              
                         )                                                                                                                                                      
            WHERE RN >= m;                                                                                                                                      
        
    4. 重新編譯包 (package) 和 包體 (package body)
        此命令可以用于查看在SQLPLUS中創建的package的編譯錯誤。

    SQL:
            a) 編譯 package
                ALTER PACKAGE YOUR_PACKAGE                                                                                                 
                COMPILE SPECIFICATION;                                                                                                                
            b) 編譯 package body

                ALTER PACKAGE YOUR_PACKAGE                                                                                                 
                COMPILE BODY;                                                                                                                                   

            c) 查看錯誤
                SHOW ERR;                                                                                                                                             

    5. 解除鎖定的用戶

    SQL:
    SQL:
        ALERT USER USERNAME UNLOCK;


     

    posted @ 2008-05-17 14:11 Rex Mao 閱讀(3118) | 評論 (2)編輯 收藏

    JAVA文件傳輸程序

    這個是我做的另一個畢業設計,使用的最基本的socket通信實現文件傳輸,使用該程序可同時給多個人發送不同的文件并支持斷點續傳。
    由于只為畢業設計而寫的,只實現了功能,沒有在速度上優化,發上來只為給要做類似程序的朋友做個參考。以下是畢業論文中的節選。

    源代碼已經上傳了。

    3章      設計文檔

    31       任務概述

           本項任務要開發一款P2P文件傳輸軟件,該軟件可以在局域網和互連上使用,具有文件傳輸,斷點續傳,多線程連接等功能。

    311      開發背景

           隨著網絡的普及,在網絡中交換信息,特別是文件成為使用網絡時經常性工作,現有的文件傳輸工具如QQMSN等,主要功能是作為即時通訊工具使用,而且在局域網中使用時仍需連接到互連網。本文開發的軟件基于P2P結構實現文件傳輸,不依靠服務器維護用戶資料,所以,只要兩臺機器可以連通,就可以進行文件傳輸。

    312       定義

           P2P:即peer-to-peer,可以理解為點對點,或對等傳輸的意思。

    313       開發工具

           開發采用JAVA語言,開發工具為jbuilder 2005

    32       文件傳輸業務流程

    321       通訊順序關系

           在文件傳輸時,傳輸過程可以簡單的分為4步,如圖

    1、              由文件發送者發起文件傳輸,他首先發送文件名,文件大小,驗證消息等信息給文件接收者。

    2、              文件接收者收到文件信息和發送者信息,決定是否接收,如不接收,則發送拒絕接收消息給文件發送者,文件傳輸結束。如同意接收,發送同意接收消息和文件傳輸起始字節(用于斷點續傳)給發送者。

    3、              發送者開始發送文件數據包,直到最后一個文件數據包,發送者在最后一個文件數據包上加上標記。

    4、              接收者識別最后一個文件數據包,文件傳輸成功。


    322       文件發送端的詳細業務流程


     

    圖中顯示了發送文件時的詳細業務流程。

    1、首先,要選擇要發送的文件,可以選擇一個文件或同一個文件夾下的多個文件發送,當選擇多個文件時,軟件將為每個文件建立一個傳輸線程。選擇文件后,發送者要填寫目標IP和端口,由于是基于P2P的文件傳輸,不存在服務器維護好友列表,所以需要知道目標IP才能傳輸文件,用戶也可以填寫驗證消息用于描述自己的身份和文件的介紹。

    2、發送者收到確認包,判斷是否接收文件,如果不接收,則傳輸結束,如果接收,則打開要發送的文件,設置起始傳輸字節。

    3、發送者讀取一個文件片段,加入是否是最后一個文件片段的標志,打包發給接收者。

    4、發送完最后一個文件片段時,文件傳輸結束。

    323       文件接收者詳細業務流程


     

    1、 從一打開軟件開始,監聽線程就會啟動,這時用戶就扮演者文件接收者的角色,當有文件發送者發來請求時,監聽線程建立與發送者的連接,并創建傳輸線程,接收者得到發送者傳來的文件信息和驗證消息,用戶還能得到發送者的IP地址,用戶根據這些信息決定是否接收文件,并發送確認包給發送者,確認包里包含了是否接收的標志,和開始傳輸的起始字節。

    2、 接收者開始接收數據包,解包,寫入文件中,直到最后一個文件片段,關閉文件,文件傳輸結束。

    33       軟件的傳輸協議設計

           為了更好的控制文件傳輸的流程,開發設計了文件傳輸協議,該協議屬于應用層協議,為了不使傳輸過程過于復雜,協議盡量簡單設計。主要的內容是傳輸包的格式。

    331       傳輸包的格式


     

    其中傳輸包的類型有3種:

    PACKAGE_TYPE_FILENAME = 0x01

    文件名包,該包用于文件發送者向接收者發送文件信息和驗證消息

    PACKAGE_TYPE_CONTEXT = 0x02

    文件內容包,該包用于傳輸文件內容

    PACKAGE_TYPE_CONFIRMRECEIVE = 0x03

    文件傳輸確認包,該包用于文件接收者向發送者確認文件的接收

    332       文件名包格式


     

    333      文件傳輸包格式

     

    其中MORE_DATA用于確認是否是文件片段的最后一個包,以結束文件的傳輸。0表示沒有數據,1表示還有數據。

    3. 34      文件接受確認包格式


     

    其中CONFIRM_FLAG表示是否確認文件接收,1表示接收,0表示不接收,當接收時,OFF表示文件傳輸的起始字節,用來實現斷點續傳。

    3.4       文件傳輸的狀態機

    文件傳輸線程的地層其實就是一個狀態轉換機,線程具有幾個狀態,線程從文件名傳輸狀態開始,根據文件傳輸的不同情況,在各個狀態間轉換,直到傳輸成功或傳輸失敗。

    FILE_TRANS_STATUS_FILENAME = 0x01

    文件名稱傳輸狀態,文件傳輸剛建立連接時,傳輸狀態處于文件名傳輸狀態

    FILE_TRANS_STATUS_CONTEXT = 0x02

    文件內容傳輸轉臺,在傳輸文件內容時,傳輸狀態屬于該狀態

    FILE_TRANS_STATUS_WAITFORCONFIRM = 0x03

    等待確認狀態,文件發送者,發送完文件信息和驗證消息后,處于該狀態,文件接收者接收到文件信息和驗證消息后處于該狀態

    FILE_TRANS_STATUS_SUCCESS = 0x04

    文件傳輸成功狀態,表示文件已成功傳輸完畢

    FILE_TRANS_STATUS_FAIL = 0x05

    文件傳輸失敗狀態,表示文件傳輸已經失敗,失敗原因可能是對方取消了文件傳輸或網絡錯誤




     

    3.5        結構設計

    軟件主要由MainFrame,TransFileManager,SocketThread,Server,TransFilePanel五個類構成圖 表示了這幾個類之間的關系。


     

    類功能介紹

    MainFrame

    MainFrame類是軟件的主界面類,負責與用戶的交互。

    TransFileManager

    TransFileManager類是文件傳輸的控制類,負責管理文件的傳輸,它維護一個傳輸線程(SocketThread)的列表,每個線程都表示一個正在傳輸的任務。TransFileManager類定時的掃描各個線程的狀態,根據不同狀態做出不同處理,如計算傳輸速度,顯示傳輸進度等。

    SocketThread

    SocketThread類是文件傳輸線程類,它負責底層的具體傳輸工作,包括打包與解包,并且轉換自己的狀態,完成文件的傳輸。

    Server

    Server類是為TransFileManager類使用的,它負責本地端口的監聽,一旦有用戶連接,TransFileManager就創建一個傳輸線程,放入線程列表。而它繼續監聽端口。

    TransFilePanel

    TransFilePanel是一個面板,它用有按鈕、進度條,標簽等用來顯示文件的傳輸狀態。

    3.6        類設計

    361       MainFrame

    該類是視圖類,是軟件的主界面。

     

    成員變量:

    contentPane

    contentPaneJPanel類的對象,是主界面的面板。

    jbtnSend

    jbtnSendJButton類對象,點擊它將打開文件傳輸對話框。

    jbtnSetting

    jbtnSettingJButton類對象,點擊它將打開設置對話框。

    jlblIP

    jlblIPJLable類對象,它顯示本機的IP地址,方便文件的傳輸。

    jtpTransFile

    jtpTransFileJTabbedPane類對象,是選項卡控件,用于顯示多個文件同時傳輸。

    tfm

    tfmTransFileManager類對象,負責控制文件的傳輸。

    成員方法:

    jbtnSend_anctionPerformed()

    該方法為jbtnSend按鈕的點擊事件

    jbtnSetting_actionPerformed()

    該方法為jbtnSetting按鈕的點擊事件

    This_windowClosed()

    該方法為窗口關閉事件

    界面截圖:


     

    362       TransFileManager

    該類負責傳輸過程中對各個傳輸線程的檢測與控制。


     

    成員變量:

    jtp

    jtp是選項卡控件對象,是MainFrame類中jtpTransFile對象的一個引用。

    panelist

    paneListArrayList類對象,它是一個鏈表結構,存儲使用的選項卡。

    running

    running是一個boolean型的對象,用來表示線程是否在執行。

    s

    sServer類的對象,用來堅聽本地端口,等待用戶的連接。

    threadList

    threadListArrayList類對象,它是一個鏈表結構,存儲使用的傳輸線程。

    maxThreadNum

    maxTreadNum是整型變量,表示最大允許的線程數。

    port

    port是整型變量,表示使用的端口號。

    成員方法:

    close()

    該方法用于關閉文件傳輸的控制。

    sendFile()

    該方法用于建立一個文件發送,要求輸入參數為,目標IP,端口號,要發送的文件和驗證消息。

    3.6.3           SocketThread

    SocketThread類是文件傳輸的底層支持類,它提供文件傳輸的服務。


     

    成員變量:

    sendBuf

    sendBuf是一個字節型數據,它是文件發送和接收時的緩沖區。

    dis

    disDataInputStream型對象,它是由Socket對象得到的輸入流。

    dos

    dosDataOutputStream型對象,它是由Socket對象得到的輸出流。

    fDis

    fDisDataInputStream型對象,它是要發送的文件的輸入流。

    raf

    rafRandomAccessFile型對象,該對象允許設置輸出流的位置,以支持斷點續傳。

    running

    running是一個boolean型對象,用來表示線程是否在執行。

    serverName

    serverName是字符串型對象,表示服務器的地址,該對象只有在線程作為發送者時使用。

    errorMessage

    errorMessage是字符串型對象,表示出錯的信息。

    fileName

    fileName是字符串型對象,表示文件名。

    fileSender

    fileSender是一個boolean型對象,表示是文件發送者還是文件接收者。

    IP

    IP是字符串型對象,用來存放目的機的IP地址。

    message

    message是字符串型對象,用來表示驗證信息。

    port

    port是整型變量,表示連接的端口號。

    transFileLength

    transFileLength是長整型變量,表示已經傳輸的文件長度,TransFileManager可以用它來計算傳輸進度和傳輸速度

    成員方法:

    cancelTrans()

    該方法用于取消傳輸

    confirmReceiveFile()

    該方法用于確認傳輸文件

    參數flag用來表示是否同意傳輸

    參數fileName用來表示保存的文件

    參數off用來表示起始傳輸字節

    getFileTransMessage()

    該方法用于得到文件傳輸的基本信息。如:文件發送的目標,端口號等。

    getStatus()

    該方法返回一個整型變量,表示當前線程的傳輸狀態。

    run()

    線程的執行方法,該方法中循環執行發送或接收方法,完成文件的發送或接收。

    setError()

    該方法通過一個字符串型的參數設置錯誤信息。

    stopThread()

    該方法用于停止線程的執行。

    doPackage()

    打包方法,該方法中,根據線程所處的不同狀態,對數據加入不同的包頭和其他信息,進行打包。

    readFromFile()

    該方法從要發送的文件中讀取一個整型數。

    readFromSocket()

    該方法從Socket輸入流讀取一個整型數,它有一個重載版本讀取一個字節數組的數據。

    receiveFile()

    該方法為接收文件的方法,是線程循環中,文件接收者執行的方法。

    sendFile()

    該方法為發送文件方法,是線程循環中,文件發送者執行的方法。

    writeToFile()

    該方法寫一個字節數據的數據到保存的文件中。

    writeToSocket()

    該方法寫數據到Socket輸出流中,它有三個重載版本,分別是寫入整型數,寫入長整型數和寫入字節數組數據。

    3.6.3            TransFilePanel

    這個類屬于視圖類,它作為主界面上的一個對象使用,含有進度條,按鈕,標簽的對象,用于顯示文件傳輸狀態,每一個傳輸線程都擁有自己的TransFilePanel類對象。


     

    成員變量:

    fileName

    fileName是一個字符串,表示傳輸文件的文件名。

    fileSender

    fileSenderboolean型對象,表示是文件發送者還是接收者。

    isCanneled

    isCanneledboolean型對象,傳輸過程中,用戶點了取消按鈕后,該標志位置true,TransFileManager會循環檢測isCanneled標志,當發現其為true后,它會關閉對應的傳輸線程,而對方會檢測到傳輸錯誤,文件傳輸就停止了。

    isClosed

    isClosedboolean型對象,它表示當傳輸過程已經停止時,用戶點擊了關閉按鈕,TransFileManager檢測到isClosedtrue時,會在列表中去掉對應的傳輸線程和TransFilePanel。

    isConfirm

    isConfirmboolean型對象,它表示文件接收者是否確認了文件接收后(包括同意和拒絕),TransFileManager檢測到isConfirmtrue時,會將確認狀態發給文件發送者。

    jbtnCannel

    jbtnCannel是取消按鈕。

    jbtnOK

    jbtnOK是確定按鈕。

    jpgbFileTrans

    jpgbFileTrans是文件傳輸的進度條。

    jtaFileTransStatus

    jtaFileTransStatus是一個文本框,用來顯示文件傳輸的狀態。

    transFileLength

    transFileLength是一個長整型變量,用來表示已經傳輸的文件長度。

    status

    status是一個整行變量,表示文件傳輸的狀態,所表示的狀態與SocketThread中的對應。

    界面截圖


     

    3.7              算法介紹

    371 TransFileManager的循環監聽

    TransFileManger類繼承了Thread類,實現多線程,避免循環監聽時產生阻塞。

    以下是在每次循環中做的工作

    1、 得到傳輸線程(SocketThread)的數量和傳輸狀態顯示面板(TransFilePanel)的數量。

    2、 從傳輸線程列表中依次取出一個傳輸線程。

    3、 判斷當前取出的線程是否有對應的傳輸狀態顯示面板,如果有執行5,如果沒有執行4。

    4、 增加傳輸狀態顯示面板,并且在主界面上增加選項卡。

    5、 判斷傳輸線程的狀態,根據不同的狀態做不同的處理。

    6、 如果列表中的線程取完,執行1,沒有取完執行2。

    程序流程圖:



     

    372 斷點續傳

    軟件支持斷點續傳的功能,該功能主要算法如下:

    1、 當文件傳輸中途停止時,文件接收者程序為接收的文件創建一個以該文件名+.tmp為文件名的臨時文件,臨時文件與該文件保存在同一個路徑下。臨時文件中保存文件以傳輸的字節數和文件的大小。

    2、 當文件接收者接收該文件時,如果有對應的臨時文件,程序會檢測到該文件的臨時文件,讀取以傳輸的字節數和文件大小,并且比較傳輸的字節數與未完成傳輸的文件大小是否相等,文件大小和發送來的文件大小是否相等,如果都相等,執行3,否則執行4

    3、 將文件的輸出流設置到應該繼續傳輸的位置,并將起始傳輸字節數發給發送者,執行5。

    4、 如果有未完成的傳輸文件,將其刪除,執行5。

    5、 進行文件傳輸。

    程序流程圖:




     

    3.7.3            本地端口的多連接監聽

    Server類對象負責本地端口的監聽,可以支持多了連接,具體數量由用戶設置。

    1、  用用戶設置的端口創建監聽,等待連接。

    2、  當有用戶連接上后,用該連接創建一個SocketThread傳輸線程,加入到線程列表。

    3、  如果停止監聽則退出,否則執行1

    程序流程圖:

    posted @ 2007-11-03 11:19 Rex Mao 閱讀(13598) | 評論 (5)編輯 收藏

    主站蜘蛛池模板: 亚洲av永久无码一区二区三区| 中文字幕乱码亚洲精品一区 | 亚洲伊人久久综合影院| 亚洲区精品久久一区二区三区| 成人a毛片免费视频观看| 国产h视频在线观看免费| 亚洲国产另类久久久精品| 免费人成大片在线观看播放电影| 欧美好看的免费电影在线观看| 亚洲午夜视频在线观看| 国产国产人免费人成成免视频| 在线观看永久免费视频网站| 99久久婷婷国产综合亚洲| 免费国产成人高清在线观看网站 | 久久综合日韩亚洲精品色| 午夜免费不卡毛片完整版| 精品亚洲视频在线| 亚洲黄色免费在线观看| 亚洲av无码不卡私人影院| 亚洲第一区二区快射影院| 国产成人精品久久亚洲高清不卡 | 免费A级毛片无码专区| 亚洲高清美女一区二区三区| 久久久久久久岛国免费播放| 亚洲毛片在线观看| 亚洲AV无码一区二区三区国产| 嫖丰满老熟妇AAAA片免费看| 韩国免费A级毛片久久| 亚洲AV无码专区国产乱码电影 | 亚洲AV日韩综合一区| 国产在线19禁免费观看国产 | 三上悠亚电影全集免费 | 免费A级毛片无码A∨中文字幕下载| 亚洲免费综合色在线视频| 国产猛烈高潮尖叫视频免费| 嫩草在线视频www免费观看 | 亚洲日韩一区二区三区| 亚洲熟妇无码久久精品| 国产老女人精品免费视频| 麻豆最新国产剧情AV原创免费| 国产一区二区三区免费|