【程式碼】--庫函式學習 ftp通訊 相關

我就不告诉你我是谁發表於2024-06-20

1. FTP介紹

(1)主動模式(PORT): 伺服器主動去連線客戶端的資料埠

(2)被動模式(PASV): 客戶端主動去連線伺服器的資料埠

ftp客戶端通訊流程(程式設計流程)如下:
  1. 客戶端用賬號、密碼進行登入。  
  2. 提交主動模式還是被動模式。 
  3. 如果是被動模式,需要去連線伺服器開放的資料傳輸埠
  4. 傳送指令到伺服器的控制埠,獲取伺服器返回結果
  5. 上傳資料夾、上傳檔案
  6. 下載資料夾、下載檔案

2. 相關函式介紹

ftp中封裝的相關函式太多,只介紹主要的函式。

2.1 dir_list.c (構建目錄下檔案連結串列)

以某一個目錄下全都是普通檔案,不包含子目錄來講解。(因為感覺存在子目錄時程式碼有問題

 資料結構:
//目錄或檔案節點
typedef struct _dir_node
{
    char *file_name;   //檔案(目錄名)名,例如:aaa.txt
    char *dir_name;    //絕對路徑檔名,例如:/home/root/aaa.txt
    int is_dir;        //1表示是目錄檔案,2表示是普通檔案   
}dir_node;

//目錄連結串列:儲存某個目錄下的所有檔案
typedef struct _dir_list
{
    dir_node **list;  //指向檔案節點指標的指標
    int count;        //當前目錄下的檔案計數
    int is_local;      //1:表示是本地客戶端中目錄。   該標誌在下載或上傳時會用到
                       //0:表示是ftp伺服器中目錄
}dir_list;
重要函式
/*該函式做的事情:
   (1)建立了一個dir_list目錄連結串列結構;
   (2)建立了length個dir_node *指標,並讓dir_list.list指向這些。
*/
(1)dir_list* create_dir_list(int length,int dir_is_local)

/*該函式做的事情:(感覺該函式有bug)
   (1)把一個目錄下所有檔案(包括目錄檔案,但除了.和..)加入到目錄連結串列中
   (2)如果該目錄下的最後一個檔案是目錄檔案,則將子目錄下的檔案也加入到目錄連結串列中(遞迴)
    注意:如果存在子目錄,則該函式可能存在問題
*/
(2)int get_dir_list(dir_list *p_dir_list,char *cur_dir)

最終得到的結果

相關文章