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)
最終得到的結果