之前使用c++實現了一個FTP客戶端,在這里做一些記錄。
一、需要注意的幾點
①FTP是一種文件傳輸協議,基於TCP,所以客戶端與服務器建立的連接是可靠、安全的,並且要經過三次握手的過程。
②FTP傳輸數據默認采用二進制模式,即將文件內容轉換為二進制表示后再傳送,而若HTML等文本文件傳輸時需要轉換成ASCII模式。
③FTP客戶端在連接服務器時需要用到兩個端口,其中一個端口(默認為21)用作控制連接端口,負責發送命令和等待響應;另一個端口用作數據傳輸,用來建立數據傳輸通道,端口號為20或其他可用端口號。
④FTP有兩種連接模式:主動模式與被動模式。主動模式命令為PORT,此模式下客戶端需要向服務器提供一個IP地址和端口號,由服務器來連接客戶端的指定端口;被動模式命令為PASV,此模式下由服務器向客戶端提供IP地址與端口號,由此解決主動模式下服務
器到客戶端的數據端口的連接被防火牆過濾掉的問題。
⑤FTP的工作流程為:客戶端連接服務器->服務器連接成功返回->客戶端發送初始化命令->服務器響應命令成功返回->客戶端發送用戶驗證消息->服務器返回驗證結果->驗證通過,客戶端進行數據操作->服務器響應客戶端操作命令->客戶端發送關閉連接命令-
>服務器響應關閉連接命令。
⑥通常FTP服務器只負責進行數據連接,在客戶端發送命令要求關閉連接時,服務器才會關閉連接。但在以下情況服務器也會關閉數據連接:
1.服務器發送數據結束,通過EOF文件結束標志終止傳送。
2.客戶端發送ABORT命令。
3.客戶端改變了端口號。
4.控制連接通道被關閉。
5.傳輸過程中發生嚴重錯誤。
⑦FTP命令與響應碼:
命令 | 描述 |
ABOR | 中斷數據連接程序 |
ACCT <account> | 系統特權帳號 |
ALLO <bytes> | 為服務器上的文件存儲器分配字節 |
APPE <filename> | 添加文件到服務器同名文件 |
CDUP <dir path> | 改變服務器上的父目錄 |
CWD <dir path> | 改變服務器上的工作目錄 |
DELE <filename> | 刪除服務器上的指定文件 |
HELP <command> | 返回指定命令信息 |
LIST <name> | 如果是文件名列出文件信息,如果是目錄則列出文件列表 |
MODE <mode> | 傳輸模式(S=流模式,B=塊模式,C=壓縮模式) |
MKD <directory> | 在服務器上建立指定目錄 |
NLST <directory> | 列出指定目錄內容 |
NOOP | 無動作,除了來自服務器上的承認 |
PASS <password> | 系統登錄密碼 |
PASV | 請求服務器等待數據連接 |
PORT <address> | IP 地址和兩字節的端口 ID |
PWD | 顯示當前工作目錄 |
QUIT | 從 FTP 服務器上退出登錄 |
REIN | 重新初始化登錄狀態連接 |
REST <offset> | 由特定偏移量重啟文件傳遞 |
RETR <filename> | 從服務器上找回(復制)文件 |
RMD <directory> | 在服務器上刪除指定目錄 |
RNFR <old path> | 對舊路徑重命名 |
RNTO <new path> | 對新路徑重命名 |
SITE <params> | 由服務器提供的站點特殊參數 |
SMNT <pathname> | 掛載指定文件結構 |
STAT <directory> | 在當前程序或目錄上返回信息 |
STOR <filename> | 儲存(復制)文件到服務器上 |
STOU <filename> | 儲存文件到服務器名稱上 |
STRU <type> | 數據結構(F=文件,R=記錄,P=頁面) |
SYST | 返回服務器使用的操作系統 |
TYPE <data type> | 數據類型(A=ASCII,E=EBCDIC,I=binary) |
USER <username>> | 系統登錄的用戶名 |
響應代碼 | 解釋說明 |
110 | 新文件指示器上的重啟標記 |
120 | 服務器准備就緒的時間(分鍾數) |
125 | 打開數據連接,開始傳輸 |
150 | 打開連接 |
200 | 成功 |
202 | 命令沒有執行 |
211 | 系統狀態回復 |
212 | 目錄狀態回復 |
213 | 文件狀態回復 |
214 | 幫助信息回復 |
215 | 系統類型回復 |
220 | 服務就緒 |
221 | 退出網絡 |
225 | 打開數據連接 |
226 | 結束數據連接 |
227 | 進入被動模式(IP 地址、ID 端口) |
230 | 登錄因特網 |
250 | 文件行為完成 |
257 | 路徑名建立 |
331 | 要求密碼 |
332 | 要求帳號 |
350 | 文件行為暫停 |
421 | 服務關閉 |
425 | 無法打開數據連接 |
426 | 結束連接 |
450 | 文件不可用 |
451 | 遇到本地錯誤 |
452 | 磁盤空間不足 |
500 | 無效命令 |
501 | 錯誤參數 |
502 | 命令沒有執行 |
503 | 錯誤指令序列 |
504 | 無效命令參數 |
530 | 未登錄網絡 |
532 | 存儲文件需要帳號 |
550 | 文件不可用 |
551 | 不知道的頁類型 |
552 | 超過存儲分配 |
553 | 文件名不允許 |