近日的專案中,用到了大檔案的傳輸,遇到了一些問題,總結如下: 1.
基本思路: 1)
大檔案的傳輸,需要分解成小包,再進行傳輸 2)
傳送方和接收方建立鏈結,當接收方同意接收後,傳送同意接收標誌。傳送方開始傳送資料第乙個小包,包括檔名稱、檔案大小、傳送小包id、小包位元組內容 3)
接收方接收資料,根據需要建立檔案儲存需要的位元組陣列,並將小包內容依次放入陣列對應位置 4)
接收方的返回資料,包括檔名稱、檔案大小、檔案已接收小包id
5) 傳送方根據接收方的返回值,來進行下一步的傳送操作,或接收完成 2.
具體做法:
在傳送端,將檔案按一定大小分成多個小包,並按照小包id和小包位元組內容包對應的方式存入arraylist中;
當收到接收方同意接收的訊號後,傳送第乙個小包,並等待返回結果。而對接收方來說,當接收到傳送方的訊號後,如果同意接收並且為第乙個資料報時,則建立接收檔案的輸出流fileoutputstream,並將資料報內容寫入該輸出流中,如果是其他包,則依次寫入輸出流檔案中,直到結束。
傳送方每次等待接收方訊號進行依次傳送資料報,如果收到接收完成的標誌,則關閉檔案。
接收方接收完畢後,關閉輸出流檔案。
3. 結論:
因為此種方法的傳送和接收是一一對應的關係,避免檔案資訊重組錯亂的問題,保證了檔案的有效重組。當然此種方式採用的是tcp長連線的方式,可能在效率方面還可以進行進一步的改進,後期可以繼續進行優化。就滿足大檔案的傳輸方面,完全可以達到要求。
TCP協議傳輸大檔案讀取時候的問題
大檔案傳不完的bug 我們在定義的時候定義服務端每次檔案讀取大小為10240,客戶端每次接受大小為10240 我們想當然的認為客戶端每次讀取大小就是10240而把客戶端的讀下來的檔案想當然大小每一次都加上10240 而實際上服務端傳送檔案send每次傳送不一定是一次性把10240的檔案傳送完,可能分...
Linux傳輸大檔案(分割傳輸)
1.分拆為多個檔案的命令 cat workspace 2018.tar.gz split b 1g workspace 2018.tar.gz.命令解釋 拆分成1g的小檔案 workspace 2018.tar.gz.是拆分後檔案的字首,預設分拆後檔名稱為workspace 2018.tar.gz....
用 VC socket 傳輸大檔案
在這個程式中,客戶端讀取桌面的乙個 1.48 gb 1,597,701,030 位元組 的rar檔案傳送給伺服器。因為這裡僅用於學習,所以客戶端要連線的目標位址使用127.0.0.1。伺服器端接將收的檔案檔案儲存在c盤根目錄下。為保證程式的可靠傳送,程式採用tcp協議。經過反覆試驗得出結論,程式中的...