**:
檔案傳輸協議(ftp)作為網路共享檔案的傳輸協議,在網路應用軟體中具有廣泛的應用。ftp的目標是提高檔案的共享性和可靠高效地傳送資料。
在傳輸檔案時,ftp 客戶端程式先與伺服器建立連線,然後向伺服器傳送命令。伺服器收到命令後給予響應,並執行命令。ftp 協議與作業系統無關,任何作業系統上的程式只要符合 ftp 協議,就可以相互傳輸資料。本文主要基於 linux 平台,對 ftp 客戶端的實現原理進行詳盡的解釋並闡述如何使用 c 語言編寫乙個簡單的 ftp 客戶端。
相比其他協議,如 http 協議,ftp 協議要複雜一些。與一般的 c/s 應用不同點在於一般的c/s 應用程式一般只會建立乙個 socket 連線,這個連線同時處理伺服器端和客戶端的連線命令和資料傳輸。而ftp協議中將命令與資料分開傳送的方法提高了效率。
ftp 使用 2 個埠,乙個資料埠和乙個命令埠(也叫做控制埠)。這兩個埠一般是21 (命令埠)和 20 (資料埠)。控制 socket 用來傳送命令,資料 socket 是用於傳送資料。每乙個 ftp 命令傳送之後,ftp 伺服器都會返回乙個字串,其中包括乙個響應**和一些說明資訊。其中的返回碼主要是用於判斷命令是否被成功執行了。
一般來說,客戶端有乙個 socket 用來連線 ftp 伺服器的相關埠,它負責 ftp 命令的傳送和接收返回的響應資訊。一些操作如「登入」、「改變目錄」、「刪除檔案」,依靠這個連線傳送命令就可完成。
如果使用被動模式,通常伺服器端會返回乙個埠號。客戶端需要用另開乙個 socket 來連線這個埠,然後我們可根據操作來傳送命令,資料會通過新開的乙個埠傳輸。
如果使用主動模式,通常客戶端會傳送乙個埠號給伺服器端,並在這個埠監聽。伺服器需要連線到客戶端開啟的這個資料埠,並進行資料的傳輸。
下面對 ftp 的主動模式和被動模式做乙個簡單的介紹。
主動模式下,客戶端隨機開啟乙個大於 1024 的埠向伺服器的命令埠 p,即 21 埠,發起連線,同時開放n +1 埠監聽,並向伺服器發出 「port n+1」 命令,由伺服器從它自己的資料埠 (20) 主動連線到客戶端指定的資料埠 (n+1)。
ftp 的客戶端只是告訴伺服器自己的埠號,讓伺服器來連線客戶端指定的埠。對於客戶端的防火牆來說,這是從外部到內部的連線,可能會被阻塞。
為了解決伺服器發起到客戶的連線問題,有了另一種 ftp 連線方式,即被動方式。命令連線和資料連線都由客戶端發起,這樣就解決了從伺服器到客戶端的資料埠的連線被防火牆過濾的問題。
被動模式下,當開啟乙個 ftp 連線時,客戶端開啟兩個任意的本地埠 (n > 1024 和 n+1) 。
第乙個埠連線伺服器的 21 埠,提交 pasv 命令。然後,伺服器會開啟乙個任意的埠 (p > 1024 ),返回如「227 entering passive mode (127,0,0,1,4,18)」。 它返回了 227 開頭的資訊,在括號中有以逗號隔開的六個數字,前四個指伺服器的位址,最後兩個,將倒數第二個乘 256 再加上最後乙個數字,這就是 ftp 伺服器開放的用來進行資料傳輸的埠。如得到 227 entering passive mode (h1,h2,h3,h4,p1,p2),那麼埠號是 p1*256+p2,ip 位址為h1.h2.h3.h4。這意味著在伺服器上有乙個埠被開放。客戶端收到命令取得埠號之後, 會通過 n+1 號埠連線伺服器的埠 p,然後在兩個埠之間進行資料傳輸。
輸入資訊
int login()
/* login */
printf(" username : ");
scanf("%s",username);
char* password = getpass(" password : ");
if(ftp_login(csock , username , password))
return csock;
else
return -1;
}
登入server
從上述幾個操作我們可以看出,ftp操作主要是和伺服器的命令互動,通過控制連線傳送命令,然後伺服器傳送響應碼,根據響應碼客戶端做出相應的操作~~~
FTP客戶端程式
ftp客戶端程式,vc6.0下除錯通過 client.c include client.h define sol socket 0xffff int fill host addr char host ip addr,struct sockaddr in host,int port else retu...
ftp客戶端程式
include include include include include pragma comment lib,ws2 32.lib file fp socket client,upload wsadata wsadata int wsareturn int portnum char spor...
FTP客戶端的基本使用 Linux學習筆記
windows和linux等平台下都自帶有命令列形式的ftp客戶端軟體,在linux中ftp命令有很多引數及內部命令。熟練掌握這些命令及引數的使用,是ftp進行自動化運維的關鍵步驟。ftp常用引數 v 顯示遠端伺服器的所有響應資訊 i 多個檔案傳送時關閉互動提示 n 禁止自動登入到初始連線 g 禁用...