Java語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單FTP軟件 FTP協(xié)議分析(1)
FTP(File Transfer Protocol)就是文件傳輸協(xié)議。通過(guò)FTP客戶端從遠(yuǎn)程FTP服務(wù)器上拷貝文件到本地計(jì)算機(jī)稱為下載,將本地計(jì)算機(jī)上的文件復(fù)制到遠(yuǎn)程FTP服務(wù)器上稱為上傳,上傳和下載是FTP最常用的兩個(gè)功能。FTP使用傳輸層的TCP協(xié)議進(jìn)行傳輸,因此客戶端與服務(wù)器之間的連接是可靠的,而且是面向連接,為數(shù)據(jù)的傳輸提供了可靠的保證。FTP的目標(biāo)有以下目標(biāo):
- 提高文件的共享性
- 提供非直接地遠(yuǎn)程操縱計(jì)算機(jī)
- 避免用戶因主機(jī)之間的文件存儲(chǔ)系統(tǒng)的差異而導(dǎo)致的變化
- 為數(shù)據(jù)的傳送提供可靠性和高效性
FTP協(xié)議模型如下圖所示

FTP使用TCP的服務(wù),它需要兩條連接。一條是數(shù)據(jù)連接用于數(shù)據(jù)傳送,一般使用端口21,而另一條是控制連接用于傳送控制信息(命令和響應(yīng)),一般使用端口20。控制連接需要傳送的只是控制信息,如一行命令或一行應(yīng)答碼,而數(shù)據(jù)連接需要傳送的數(shù)據(jù)類型繁雜,如文本文件、圖形文件、應(yīng)用程序等等。
FTP協(xié)議模型中使用到的交互元素包括用戶接口、USERPI、UPTP、SPI、SDTP的說(shuō)明如下圖所示

FTP傳輸有兩種方式:文本傳輸模式和二進(jìn)制數(shù)據(jù)傳輸模式。其中文本模式又叫ASCII模式,二進(jìn)制模式又叫Binary模式。
FTP服務(wù)分為普通FTP與匿名FTP服務(wù)兩種類型。
常用FTP的命令有:
1) 接入命令
USER:指明用戶名
PASS:指明與用戶名對(duì)應(yīng)的密碼
ABOR: 異常中斷數(shù)據(jù)連接程序
QUIT:從系統(tǒng)注銷
REIN:重新初始化
2) 文件管理命令
CWD: 改變服務(wù)器上的工作目錄到指定目錄
CDUP: 改變服務(wù)器上的工作目錄到父目錄
DELE:請(qǐng)求刪除服務(wù)器上的文件。
LIST:列出子目錄或文件
MKD:請(qǐng)求在服務(wù)器上新建一個(gè)目錄
PWD: 顯示當(dāng)前工作目錄
RMD: 從服務(wù)器上刪除指定目錄
3) 數(shù)據(jù)格式化命令
TYPE: 定義文件類型,共有四種類型,所帶參數(shù)也有四種:A、E 、I 、L分別對(duì)應(yīng)ASCII,EBCDIC,IMAGB和LOCAL類型。
STRU: 定義數(shù)據(jù)的組織
MODE: 定義傳輸方式
4) 端口定義命令
PASV:服務(wù)器選擇端口,客戶端使用這個(gè)端口發(fā)送主動(dòng)打開(kāi)
PORT: 客戶端選擇端口,服務(wù)器使用這個(gè)端口創(chuàng)建主動(dòng)打開(kāi)
5) 文件傳送命令
RETR:讀取文件,文件從服務(wù)器端傳送到客戶端
STOR:存放文件,文件從客戶端傳送到服務(wù)器端
STAT: 返回文件的狀態(tài)
ALLOO: 在服務(wù)器為文件分配存儲(chǔ)空間
6) 雜項(xiàng)命令
HELP: 詢問(wèn)服務(wù)器的信息
NOOP: 檢查服務(wù)器是否工作
SITE: 指定特定場(chǎng)所的命令
SYST: 詢問(wèn)服務(wù)器使用的操作系統(tǒng)
客戶端發(fā)送 FTP 命令后,服務(wù)器返回響應(yīng)碼。響應(yīng)碼用三位數(shù)字編碼表示:
第一個(gè)數(shù)字定義命令的狀態(tài)。
1 表示服務(wù)器正確接收信息,還未處理。
2 表示服務(wù)器已經(jīng)正確處理信息。
3 表示服務(wù)器正確接收信息,正在處理。
4 表示信息暫時(shí)錯(cuò)誤。
5 表示信息永久錯(cuò)誤。
第二個(gè)數(shù)字是響應(yīng)類型的分類。
0 表示語(yǔ)法。
1 表示系統(tǒng)狀態(tài)和信息。
2 表示連接狀態(tài)。
3 表示與用戶認(rèn)證有關(guān)的信息。
4 表示未指明。
5 表示與文件系統(tǒng)有關(guān)的信息。
第三個(gè)數(shù)字提供了更加附加信息。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
教大家使用java實(shí)現(xiàn)頂一下踩一下功能
這篇文章主要教大家如何使用java實(shí)現(xiàn)頂一下踩一下功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-02-02
mybatis參數(shù)類型不匹配錯(cuò)誤argument type mismatch的處理方案
這篇文章主要介紹了mybatis參數(shù)類型不匹配錯(cuò)誤argument type mismatch的處理方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-01-01
關(guān)于Java中finalize析構(gòu)方法的作用詳解
構(gòu)造方法用于創(chuàng)建和初始化類對(duì)象,也就是說(shuō),構(gòu)造方法負(fù)責(zé)”生出“一個(gè)類對(duì)象,并可以在對(duì)象出生時(shí)進(jìn)行必要的操作,在這篇文章中會(huì)給大家簡(jiǎn)單介紹一下析構(gòu)方法,需要的朋友可以參考下2023-05-05
IntelliJ IDEA 2021.1 推出語(yǔ)音、視頻功能,邊寫代碼邊聊天(功能超級(jí)強(qiáng)大
這篇文章主要介紹了IntelliJ IDEA 2021.1 推出語(yǔ)音、視頻功能,邊寫代碼邊聊天(功能超級(jí)強(qiáng)大),本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-04-04
SpringBoot使用責(zé)任鏈模式優(yōu)化業(yè)務(wù)邏輯中的if-else代碼
在開(kāi)發(fā)過(guò)程中,我們經(jīng)常會(huì)遇到需要根據(jù)不同的條件執(zhí)行不同的邏輯的情況,我們可以考慮使用責(zé)任鏈模式來(lái)優(yōu)化代碼結(jié)構(gòu),使得代碼更加清晰、可擴(kuò)展和易于維護(hù)2023-06-06
Bean的自動(dòng)注入及循環(huán)依賴問(wèn)題
本文詳細(xì)介紹了Bean的自動(dòng)注入及循環(huán)依賴,文中通過(guò)代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)有一定的研究?jī)r(jià)值,感興趣的小伙伴可以閱讀參考2023-03-03

