如果傳輸文件夾,可以在服務器端發送,在客戶端接收。
方法是在指定端口建立攔截,比如8888,使用的協議可以是tcp/ip或者udp/ip。
Udp是壹種無鏈接、不可靠的協議,建議傳輸文件或使用tcp協議。
客戶端通過connect函數連接到服務器後,就可以傳輸數據了。
其實文件傳輸的本質就是數據傳輸,我們只需要使用opendir函數在服務器端“打開”文件夾。
然後使用readdir函數遍歷文件夾,判斷所有讀取的文件名,比如文件是否是文件夾,或者是否會包含特殊文件,比如軟鏈接、套接字文件、管道文件等。如果是文件夾,會對文件夾進行遞歸(即進入文件夾後執行同樣的方法,以此類推,直到讀取完所有文件夾)。並將文件夾名稱發送給客戶端。收到文件夾名後,客戶端使用mkdir函數創建壹個文件夾。如果壹般文件的文件名和目錄發送到客戶端,客戶端創建文件(如果是多級文件夾,客戶端進入文件夾)以讀取文件(fopen或open)。可以在讀取文件內容的同時將讀取的內容發送給客戶端,客戶端可以將接收到的內容寫入文件。
這裏需要註意的是,服務器和客戶端需要規劃壹定的規則,即需要建立服務器和客戶端之間的簡單通信協議。
例如,用最簡單的方式,我們使用文件類型:文件名來表示傳輸數據的含義。
服務器在檢查文件夾中的文件時,會根據不同的文件類型做出不同的標簽,客戶端通過檢測這些標簽來確定下壹步的操作。
例如,如果服務器檢測到壹個文件夾,它將發送文件夾:文件夾的名稱。
客戶端收到數據後解析數據。如果冒號前的文件類型是文件夾,則創建壹個冒號後的文件夾名(其中文件夾名包含多級目錄,我們也可以設置的更完善,比如文件類型:文件夾:文件夾,最後壹個文件夾名是客戶端需要創建的文件夾,前面壹個是文件夾所在的絕對路徑)。
有了這個簡潔的協議,可以更好的完成socket文件夾的復制。