一個UDP實現文件傳輸的設計--待續...

轉自 http://www.javaeye.com/topic/135874

 

首先文件發送必須有發送端(下面都叫它爲Sender)和接收端(下面都叫它爲Accepter),兩都都各自啓動一個DatagramSocket端口監聽.它們之間的傳輸是基於DatagramPacket的,所以爲了能夠解釋這個包,我們必須自定義一些包,以便於能夠識別包.

下面這些包是我自己定義的:

主要有如下這些包:

FileInfoDataPakcet(文件信息包),FileDataPacket(文件數據包),ResponseFileInfoDataPakcet(響應文件信息包),

RequestFileDataPacket(請求文件包),TransStatusDataPacket(請求傳輸狀態包),以及ResponseTransStatusDataPacket(響應請求傳輸狀態包),下面分別來解釋它們

 FileInfoDataPacket:  一個是當Sender發送文件給Accepter時,它要先發送一個關於文件信息的包,如文件大小,文件名,文件分成幾塊.

ResponseFileInfoDataPakcet(響應文件信息包):Accepter收到文件之後,就要做出響應,是拒絕或者接受,但無論是拒絕或者接受,都要發一條響應包給Sender,這個消息包就是(ResponseFileInfoDataPacket).Sender收到之後,如果是拒絕文件包,就刪除任務,如果對方接受文件,就要開始等待對方過來的請求包RequestFileDataPacket(請求文件包),

RequestFileDataPacket(請求文件包):請求文件包是Accepter發出的,它表求要請要Sender發文件的第一個包,然後收到之後,就用RandomAccessFile寫入文件.寫這個文件的過程可能會發生兩種情況,一種是用戶中斷了,另外是一種傳輸完成正的中止,這時還要發消息告訴Sender說,我已經中斷了此任務,或者文件已經傳輸完成,這個消息包就是TransStatusDataPacket(請求傳輸狀態包)

TransStatusDataPacket(請求傳輸狀態包):它就是Accepter中斷文件傳輸或者文件傳輸完成時發給Sender給示對方能夠移除正在進行的任務.

ResponseTransStatusDataPacket(響應請求傳輸狀態包):當Sender收到請求傳輸狀態包後,還要發一個響應包給Accepter通知Accepeter把請求傳輸狀態包刪除.當然這些事情都是基於線程而做的.

小結:

   1.UDP傳輸文件會比較麻煩,它不像TCP那麼穩定,在網絡不穩定的情況下,用UDP傳輸文件才比較符合實際(當然也不排除特殊情況).UDP傳輸需要考慮丟包情況,以及如何處理在丟包時重發數據包.

   2.數據發送時,有的數據需要對方回覆,在網絡不穩定的情況下,我們就需要不斷的給對方發數據包,直到有數據回覆,這就要讓線程去做,如果收到對方回覆之後我們才停止發包.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章