首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 實作 FTP 客戶端(一):FTP 協定深度解析

     編輯:Java 相關知識

FTP 協定基礎概念

FTP(File Transfer Protocol,檔案傳輸協定)** 是 TCP/IP 協定族中應用層協定,用於客戶端與伺服器間檔案傳輸。核心操作:

  • 下載:從遠端 FTP 伺服器複製檔案到本機
  • 上傳:從本機複製檔案到遠端 FTP 伺服器

FTP 基於傳輸層 TCP 協定**,提供可靠、面向連線的傳輸保障。

FTP 協定目標

  1. 提升檔案共享性
  2. 提供非直接遠端電腦操作能力
  3. 屏蔽主機間檔案儲存系統差異
  4. 提供可靠且高效的資料傳輸

FTP 協定模型與雙通道架構

FTP協定模型

FTP 採用**雙通道設計**,這是其區別於其他協定的關鍵特徵:

通道類型功能預設埠號傳輸內容
控制連線 傳送控制資訊(命令與回應) 21 單行命令、應答碼
資料連線 實際檔案資料傳輸 20 文字檔、圖片、應用程式等各類資料

設計動機:控制資訊簡短固定,資料類型多樣複雜。分離通道可獨立優化,控制通道持久連線,資料通道按需建立。

FTP 協定交互元件

FTP交互元件

  • 用戶介面:使用者操作入口
  • USER PI(Protocol Interpreter):用戶端協定解釋器,處理命令與回應
  • U-DTP(Data Transfer Process):用戶端資料傳輸進程
  • S-PI:伺服器端協定解釋器
  • S-DTP:伺服器端資料傳輸進程

傳輸模式

模式名稱別名適用場景
ASCII 模式 文字傳輸模式 純文字檔案(原始碼、HTML、設定檔),會進行行尾轉換
Binary 模式 二進制資料傳輸模式 所有非文字檔(圖片、壓縮檔、執行檔、資料庫檔),位元級完整傳輸

實務建議:預設使用 Binary 模式,僅在確認為純文字檔且需跨平台行尾轉換時使用 ASCII 模式。

FTP 服務類型

  • 一般 FTP:需帳號密碼驗證,權限依用戶設定
  • 匿名 FTP:用戶名 anonymous,密碼通常為電子郵件,提供公開檔案下載

核心 FTP 命令集

1. 存取命令

USER      # 指定用戶名
PASS      # 指定密碼
ABOR                # 異常中斷資料連線
QUIT                # 登出
REIN                # 重新初始化連線

2. 檔案管理命令

CWD      # 切換工作目錄
CDUP            # 切換到父目錄
DELE      # 刪除檔案
LIST            # 列出目錄/檔案
MKD        # 建立目錄
PWD             # 顯示當前工作目錄
RMD        # 刪除目錄

3. 資料格式化命令

TYPE   # 設定檔案類型:ASCII/EBCDIC/Image/Local
STRU     # 設定資料結構:File/Record/Page
MODE     # 設定傳輸模式:Stream/Block/Compressed

4. 埠號定義命令(被動/主動模式核心)

PASV            # 被動模式:伺服器開啟埠,客戶端主動連接
PORT   # 主動模式:客戶端開啟埠,伺服器主動連接

5. 檔案傳輸命令

RETR      # 下載:伺服器→客戶端
STOR      # 上傳:客戶端→伺服器
STAT      # 檔案狀態查詢
ALLO      # 預分配儲存空間

6. 雜項命令

HELP            # 查詢伺服器支援命令
NOOP            # 檢查伺服器連線狀態
SITE       # 站點特定命令
SYST            # 查詢伺服器作業系統類型

FTP 回應碼解析

三位數字編碼:xyz

位置含義數值對照
第一位 (x) 命令處理狀態 1=收到待處理, 2=成功完成, 3=需進一步資訊, 4=暫時錯誤, 5=永久錯誤
第二位 (y) 回應分類 0=語法, 1=系統狀態, 2=連線狀態, 3=認證相關, 4=未指定, 5=檔案系統
第三位 (z) 補充細節 具體子代碼

常見回應碼範例:

  • 220:服務就緒(連線建立成功)
  • 230:登入成功
  • 150:資料連線開啟,準備傳輸
  • 226:傳輸完成,關閉資料連線
  • 530:未登入或認證失敗
  • 550:檔案不可用(不存在/無權限)

總結

理解 FTP 的雙通道架構、主動/被動模式差異、命令與回應碼體系,是實作健壯 FTP 客戶端的前提。下一篇將介紹 Java 實作 FTP 客戶端的核心類別設計與連線管理。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved