1、概述
本設計旨在通過socket的TCP實作不同類型檔案的收發,UDP實作消息的收發。
1.1 需求概述
基本需求:
1) 支援發送不同類型的檔案(.txt,.doc,.jpg,.exe,.mp3等所有類型)
2) 支援發送字元消息。
3) 支援可視化、直覺顯示與操作。
4) 支援單機收發、區域網路内兩台機器收發。
1.2開發環境
程式設計語言:C++語言
開發及運作環境:Window作業系統、內建開發環境VS2008。
2、界面設計
圖2.1伺服器端界面
圖2.2用戶端界面
3、總體設計
總體設計需要參照設計要求去設計。
針對要求一:支援發送不同類型的檔案(.txt,.doc,.jpg,.exe,.mp3等所有類型)。
Socket實作通信自不必說,而檔案的傳輸歸根結底是檔案的讀、寫。檔案的讀寫涉及到檔案的屬性:檔案的名稱(含擴充名,所在路徑名)、檔案大小、檔案内容資訊。
核心有三點:
(1)讀取檔案的前提是知道檔案的路徑。檔案的名稱+檔案所在的路徑即為檔案的絕對路徑。而存儲檔案的時候也需要同發送檔案名字相同存儲,亦需要知道接收檔案的路徑。
(2)發送、接收的過程都要涉及讀取、接收累計位元組的多少和檔案大小比較,這也是驗證檔案是否讀取完畢或者接收完畢的方法。
(3)檔案内容資訊,即整個檔案長度的位元組數,可以循環讀檔案到buffer、寫檔案到buffer,最後寫入磁盤路徑來完成寫入。
檔案的傳輸考慮到可靠傳輸,可以通過TCP套接字來實作。
針對要求二:支援發送字元消息。
發送字元消息,可以采取一端等待接收、一端發送消息的UDP套接字來實作。
針對要求三:支援可視化、直覺顯示與操作。
考慮到能直覺顯示指定發送源檔案夾sourcefile,接收目标檔案夾destfile裡的内容。我們考慮采用listCtrl清單框通過圖示+檔案名稱+擴充名的形式顯示檔案。且可以關聯單擊添加、左輕按兩下打開、右輕按兩下删除的操作。
考慮到對接收到檔案的直覺顯示,對于圖檔的顯示,我們借鑒設計了緩存模式和存盤模式。緩存模式将接收到的檔案顯示在我們設定的區域。而對于硬碟模式,檔案存儲在對應磁盤的destfile檔案夾下,同時在接收端的listctrl清單框會有對應圖示顯示。僅圖檔可以緩存模式顯示,所有類型的檔案都可以通過硬碟模式存儲和直覺顯示。
針對要求四:支援單擊收發、兩台機器收發。
考慮到支援不同機器收發,我們設計了可配置的IP位址和端口号的模式。友善操作和實作。
4、伺服器端的核心設計流程
5、用戶端的核心設計流程

6、檔案收發操作示例
步驟一:
圖6.1伺服器端配置完畢後
如圖6.1所示,勾選伺服器配置複選對話框,無需更改配置,單擊配置完畢、單擊啟動服務,完成等待連接配接。此時選擇的是緩存模式。
步驟二:
圖6.2用戶端選中待發送檔案,點選接受按鈕
如圖6.2所示,點選檔案發送list清單框,選擇待發送的檔案123.jpg。單擊接受按鈕,以等待接受UDP消息。已選框可以有多個不同類型的檔案,但發送的時候,一次隻能發送一個檔案,以最後選擇的檔案為準。
步驟三:
圖6.3用戶端單擊連接配接請求、發送按鈕後
如圖6.3所示,點選連接配接請求、發送按鈕後,用戶端顯示檔案發送滾動條完畢,發送狀态欄記錄了發送狀态及發送的位元組數。
伺服器端接受發送檔案後的界面如圖6.4所示。
圖6.4伺服器端緩存接收發送檔案後
如圖6.4所示,伺服器端緩存接收檔案會在右側顯示,左側Socket狀态欄會顯示接收狀态。
同步驟1à步驟3,若改為硬碟模式接收。硬碟模式步驟3截圖如下圖6.5、圖6.6:
圖6.5用戶端單擊連接配接請求、發送按鈕後,發送sangfor.txt
圖6.6伺服器端硬碟模式接收,并輕按兩下Sangfor.txt打開後截圖。
如圖6.7,伺服器端寫入消息并單擊發送按鈕後,用戶端能接收消息并顯示。
圖6.7用戶端接收伺服器端消息後顯示
7、待擴充、完善功能
(1)用戶端現在一次僅能發送一個檔案,可擴充至一次發送多個檔案。
(2)目前的連接配接、發送、接收,一次發送、一次接收完畢套接字即關閉,可擴充至建立連接配接後可持續發送。
可視化檔案消息一體化收發Socket實作V0.1 說明文檔
下載下傳位址:
http://download.csdn.net/detail/wojiushiwo987/5149658可視化檔案消息一體化收發Socket實作V0.1 源碼
http://download.csdn.net/detail/wojiushiwo987/5149657作者:銘毅天下
原文:
https://blog.csdn.net/laoyang360/article/details/8681918