資源描述:
《linux下ftp編程-socket》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、使用Socket通信實現(xiàn)FTP客戶端程序FTP客戶端如FlashFXP,F(xiàn)ileZilla被廣泛應(yīng)用,原理上都是用底層的Socket來實現(xiàn)。FTP客戶端與服務(wù)器端進行數(shù)據(jù)交換必須建立兩個套接字,一個作為命令通道,一個作為數(shù)據(jù)通道。前者用于客戶端向服務(wù)器發(fā)送命令,如登錄,刪除某個文件,后者用于接收數(shù)據(jù),例如下載或上傳文件等。本文詳細闡述如何調(diào)用系統(tǒng)接口發(fā)送FTP命令實現(xiàn)文件上傳下載等FTP客戶端功能,讓讀者對FTP客戶端的原理有一個深入的了解。FTP概述oFTP協(xié)議o實現(xiàn)FTP客戶端上傳下載功能o結(jié)束語o參考資料o評論FTP概述文件傳輸協(xié)議(FTP)作為網(wǎng)絡(luò)共享
2、文件的傳輸協(xié)議,在網(wǎng)絡(luò)應(yīng)用軟件中具有廣泛的應(yīng)用。FTP的目標(biāo)是提高文件的共享性和可靠高效地傳送數(shù)據(jù)。在傳輸文件時,F(xiàn)TP客戶端程序先與服務(wù)器建立連接,然后向服務(wù)器發(fā)送命令。服務(wù)器收到命令后給予響應(yīng),并執(zhí)行命令。FTP協(xié)議與操作系統(tǒng)無關(guān),任何操作系統(tǒng)上的程序只要符合FTP協(xié)議,就可以相互傳輸數(shù)據(jù)。本文主要基于LINUX平臺,對FTP客戶端的實現(xiàn)原理進行詳盡的解釋并闡述如何使用C語言編寫一個簡單的FTP客戶端。FTP協(xié)議相比其他協(xié)議,如HTTP協(xié)議,F(xiàn)TP協(xié)議要復(fù)雜一些。與一般的C/S應(yīng)用不同點在于一般的C/S應(yīng)用程序一般只會建立一個Socket連接,這個連接同時
3、處理服務(wù)器端和客戶端的連接命令和數(shù)據(jù)傳輸。而FTP協(xié)議中將命令與數(shù)據(jù)分開傳送的方法提高了效率。FTP使用2個端口,一個數(shù)據(jù)端口和一個命令端口(也叫做控制端口)。這兩個端口一般是21(命令端口)和20(數(shù)據(jù)端口)??刂芐ocket用來傳送命令,數(shù)據(jù)Socket是用于傳送數(shù)據(jù)。每一個FTP命令發(fā)送之后,F(xiàn)TP服務(wù)器都會返回一個字符串,其中包括一個響應(yīng)代碼和一些說明信息。其中的返回碼主要是用于判斷命令是否被成功執(zhí)行了。命令端口一般來說,客戶端有一個Socket用來連接FTP服務(wù)器的相關(guān)端口,它負責(zé)FTP命令的發(fā)送和接收返回的響應(yīng)信息。一些操作如“登錄”、“改變目錄”
4、、“刪除文件”,依靠這個連接發(fā)送命令就可完成。數(shù)據(jù)端口對于有數(shù)據(jù)傳輸?shù)牟僮?,主要是顯示目錄列表,上傳、下載文件,我們需要依靠另一個Socket來完成。如果使用被動模式,通常服務(wù)器端會返回一個端口號??蛻舳诵枰昧黹_一個Socket來連接這個端口,然后我們可根據(jù)操作來發(fā)送命令,數(shù)據(jù)會通過新開的一個端口傳輸。如果使用主動模式,通常客戶端會發(fā)送一個端口號給服務(wù)器端,并在這個端口監(jiān)聽。服務(wù)器需要連接到客戶端開啟的這個數(shù)據(jù)端口,并進行數(shù)據(jù)的傳輸。下面對FTP的主動模式和被動模式做一個簡單的介紹。主動模式(PORT)主動模式下,客戶端隨機打開一個大于1024的端口向服務(wù)器
5、的命令端口P,即21端口,發(fā)起連接,同時開放N+1端口監(jiān)聽,并向服務(wù)器發(fā)出“portN+1”命令,由服務(wù)器從它自己的數(shù)據(jù)端口(20)主動連接到客戶端指定的數(shù)據(jù)端口(N+1)。FTP的客戶端只是告訴服務(wù)器自己的端口號,讓服務(wù)器來連接客戶端指定的端口。對于客戶端的防火墻來說,這是從外部到內(nèi)部的連接,可能會被阻塞。被動模式(PASV)為了解決服務(wù)器發(fā)起到客戶的連接問題,有了另一種FTP連接方式,即被動方式。命令連接和數(shù)據(jù)連接都由客戶端發(fā)起,這樣就解決了從服務(wù)器到客戶端的數(shù)據(jù)端口的連接被防火墻過濾的問題。被動模式下,當(dāng)開啟一個FTP連接時,客戶端打開兩個任意的本地端口
6、(N>1024和N+1)。第一個端口連接服務(wù)器的21端口,提交PASV命令。然后,服務(wù)器會開啟一個任意的端口(P>1024),返回如“227enteringpassivemode(127,0,0,1,4,18)”。它返回了227開頭的信息,在括號中有以逗號隔開的六個數(shù)字,前四個指服務(wù)器的地址,最后兩個,將倒數(shù)第二個乘256再加上最后一個數(shù)字,這就是FTP服務(wù)器開放的用來進行數(shù)據(jù)傳輸?shù)亩丝?。如得?27enteringpassivemode(h1,h2,h3,h4,p1,p2),那么端口號是p1*256+p2,ip地址為h1.h2.h3.h4。這意味著在服務(wù)器上
7、有一個端口被開放??蛻舳耸盏矫钊〉枚丝谔栔?會通過N+1號端口連接服務(wù)器的端口P,然后在兩個端口之間進行數(shù)據(jù)傳輸。主要用到的FTP命令FTP每個命令都有3到4個字母組成,命令后面跟參數(shù),用空格分開。每個命令都以"r"結(jié)束。要下載或上傳一個文件,首先要登入FTP服務(wù)器,然后發(fā)送命令,最后退出。這個過程中,主要用到的命令有USER、PASS、SIZE、REST、CWD、RETR、PASV、PORT、QUIT。USER:指定用戶名。通常是控制連接后第一個發(fā)出的命令?!癠SERgaoleyir”:用戶名為gaoleyi登錄。PASS:指定用戶密碼。該命
8、令緊跟USER命令后?!癙ASSgao