FTP客戶端設(shè)計(jì)與實(shí)現(xiàn)_第1頁
FTP客戶端設(shè)計(jì)與實(shí)現(xiàn)_第2頁
FTP客戶端設(shè)計(jì)與實(shí)現(xiàn)_第3頁
FTP客戶端設(shè)計(jì)與實(shí)現(xiàn)_第4頁
FTP客戶端設(shè)計(jì)與實(shí)現(xiàn)_第5頁
已閱讀5頁,還剩11頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

/書目 摘要2關(guān)鍵詞21.引言22.FTP協(xié)議分析22.1FTP工作原理22.2FTP工作模式42.3FTP傳輸模式62.3.1ASCII傳輸方式62.3.2二進(jìn)制傳輸方式63.FTP客戶端的總體設(shè)計(jì)63.1設(shè)計(jì)目的及工具的選擇63.1.1設(shè)計(jì)目的63.1.2設(shè)計(jì)工具73.1.3FtpClient類73.2客戶端主要模塊設(shè)計(jì)73.2.1客戶端功能模塊83.2.2客戶端界面設(shè)計(jì)93.3數(shù)據(jù)流程圖93.3.1客戶端連接流程圖93.3.2上傳子模塊流程圖113.3.3下載子模塊流程圖124.FTP客戶端程序?qū)崿F(xiàn)144.1客戶端顯示界面實(shí)現(xiàn)14 4.1.1數(shù)據(jù)輸入界面具體設(shè)計(jì)144.1.2服務(wù)器文件信息顯示界面具體設(shè)計(jì)144.1.3上下載隊(duì)列顯示界面和信息顯示界面具體設(shè)計(jì)154.1.4操作按鈕模塊具體設(shè)計(jì)154.2功能模塊實(shí)現(xiàn)164.2.1連接服務(wù)器164.2.2上傳文件164.2.3下載文件17功能運(yùn)行測(cè)試176.結(jié)語20參考文獻(xiàn)21附錄22FTP客戶端的設(shè)計(jì)和實(shí)現(xiàn)摘要:FTP是Internet上用來傳送文件的協(xié)議。它是為了我們能夠在Internet上相互傳送文件而制定的文件傳送標(biāo)準(zhǔn),規(guī)定了Internet上文件如何傳送。通過FTP協(xié)議,我們就可以跟Internet上的FTP服務(wù)器進(jìn)行文件的上傳或下載。本文以實(shí)現(xiàn)一個(gè)簡潔易用的FTP客戶端為目標(biāo),通過分析FTP協(xié)議的基本工作原理和FTP的數(shù)據(jù)傳輸原理,探討如何運(yùn)用Java工具對(duì)FTP客戶端進(jìn)行設(shè)計(jì),選擇Java類庫中的FtpClient類來實(shí)現(xiàn)FTP客戶端程序的上傳下載等主要功能,并用eclipse軟件供應(yīng)的一個(gè)支持可視化編程的開發(fā)環(huán)境,從而實(shí)現(xiàn)了對(duì)FTP客戶端的開發(fā)。關(guān)鍵詞:FTP協(xié)議,工作原理,F(xiàn)tpClient,上傳下載引言目前,F(xiàn)TP服務(wù)已經(jīng)是網(wǎng)絡(luò)上廣泛運(yùn)用的一種服務(wù)了,它是建立在FTP協(xié)議上的用于網(wǎng)絡(luò)環(huán)境下進(jìn)行文件傳輸?shù)囊环N文件傳輸系統(tǒng),幾乎可以傳輸各種類型的文件,如文本文件,聲音文件,圖像文件等。一個(gè)文件傳輸系統(tǒng)有服務(wù)器端程序和客戶端程序共同組成的,客戶端程序供應(yīng)用戶操作的界面并完成文件的上傳和下載。在網(wǎng)絡(luò)應(yīng)用中,F(xiàn)TP有著特別重要的地位,在Internet中一個(gè)特別重要的就是資源,而各種各樣的資源大多數(shù)都是放在FTP服務(wù)器中的,為了獲得這些資源,我們必需運(yùn)用FTP客戶端軟件。目前流行的有cuteFTP,WS_FTP,ByteCatcher,F(xiàn)TPVoyage等。為了便利用戶的運(yùn)用,本文將介紹一種基于Java的FTP客戶端程序的設(shè)計(jì)和實(shí)現(xiàn)。本文首先分析了FTP協(xié)議,F(xiàn)TP的工作原理等,然后介紹了如何運(yùn)用Java工具來設(shè)計(jì)和實(shí)現(xiàn)一個(gè)簡潔的FTP客戶端。運(yùn)用本FTP客戶端,可以運(yùn)用戶輕松的下載、上傳網(wǎng)絡(luò)資源。FTP協(xié)議分析2.1FTP的工作原理FTP(FileTransferProtocol),是文件傳輸協(xié)議的簡稱。用于Internet上的限制文件的雙向傳輸。同時(shí),它也是一個(gè)應(yīng)用程序。用戶可以通過它把自己機(jī)器和世界各地全部運(yùn)行FTP協(xié)議的服務(wù)器相連,訪問服務(wù)器上的資源和信息。FTP協(xié)議在TCP/IP協(xié)議棧中的位置如表1:表1TCP/IP協(xié)議棧HTTPFTPTELNSMTPDNSTFTPNMP應(yīng)用層TCPUDP傳輸層IP互聯(lián)網(wǎng)絡(luò)層X25ISDNLANWLANFDDIATM網(wǎng)絡(luò)接口層當(dāng)啟動(dòng)FTP從遠(yuǎn)程計(jì)算機(jī)拷貝文件時(shí),事實(shí)上啟動(dòng)了兩個(gè)程序:一個(gè)本地機(jī)器上的FTP客戶端程序,它向FTP服務(wù)器提出拷貝文件的懇求。另一個(gè)是啟動(dòng)在遠(yuǎn)程計(jì)算機(jī)的上的FTP服務(wù)器程序,它響應(yīng)懇求把你指定的文件傳送到你的計(jì)算機(jī)中。FTP采用“客戶端/服務(wù)器”方式,用戶要在自己的本地計(jì)算機(jī)上安裝FTP客戶端程序。從根本上說,F(xiàn)TP協(xié)議就是在網(wǎng)絡(luò)中各種不同的計(jì)算機(jī)之間依據(jù)TCP/IP協(xié)議來傳輸文件。FTP協(xié)議采納客戶端/服務(wù)器(Client/Sever)模式,由FTP客戶端程序和FTP服務(wù)器端程序組成。運(yùn)用時(shí),先啟動(dòng)FTP客戶端程序和遠(yuǎn)程主機(jī)建立連接,然后向遠(yuǎn)程主機(jī)發(fā)出傳輸吩咐,遠(yuǎn)程主機(jī)在收到吩咐后就賜予響應(yīng),并執(zhí)行正確的吩咐。但是FTP有一個(gè)根本的限制,那就是,假如用戶在某個(gè)主機(jī)上沒有注冊(cè)獲得授權(quán),即沒有用戶名和口令,就不能和該主機(jī)進(jìn)行文件傳輸。但匿名FTP服務(wù)器除外,它能夠運(yùn)用戶和遠(yuǎn)程主機(jī)建立連接并以匿名身份從遠(yuǎn)程主機(jī)上拷貝文件,而不必是該遠(yuǎn)程主機(jī)的注冊(cè)用戶。用戶運(yùn)用特別的用戶名“Anonymous”或“guest”就可有限制地訪問遠(yuǎn)程主機(jī)上公開的文件。現(xiàn)在很多系統(tǒng)要求用戶將Emai1地址作為口令,以便更好地對(duì)訪問者進(jìn)行跟綜。出于平安的目的,大部分匿名FTP主機(jī)一般只允許遠(yuǎn)程用戶下載文件,而不允許上載文件。也就是說,用戶只能從匿名FTP主機(jī)拷貝其須要的文件而不能把文件拷貝到匿名FTP主機(jī)。另外,匿名FTP主機(jī)還采納了其他一些愛護(hù)措施以愛護(hù)自己的文件不至于被用戶修改和刪除,并防止計(jì)算機(jī)病毒的侵入。匿名FTP始終是Internet上獲得信息資源的最主要方式,在Internet成千上萬的匿名FTP主機(jī)中存儲(chǔ)著無以計(jì)數(shù)的文件,這些文件包含了各種各樣的信息、數(shù)據(jù)和軟件。人們只要知道特定信息資源的主機(jī)地址,就可以用匿名FTP登陸。2.2FTP工作模式FTP采納C/S(客戶端/服務(wù)器)模式進(jìn)行通信,但和其他的C/S模式網(wǎng)絡(luò)通信協(xié)議又有一個(gè)很大的區(qū)分。通常在進(jìn)行HTTP通信或是TELNET通信的時(shí)候,只須要一個(gè)端口進(jìn)行通信。即客戶端只須要連接一個(gè)端口進(jìn)行數(shù)據(jù)通信。如TELNET的默認(rèn)端口是23,用戶從頭到尾都只需運(yùn)用這個(gè)端口。但是FTP通信除了有一個(gè)默認(rèn)端口21之外,還須要其他的端口。其中默認(rèn)端口(21)主要進(jìn)行限制連接,進(jìn)行吩咐協(xié)議和服務(wù)器端的響應(yīng)碼的傳輸;另外一個(gè)非標(biāo)準(zhǔn)端口主要進(jìn)行數(shù)據(jù)傳遞,如文件的上載、下載等。至于非標(biāo)準(zhǔn)端口的產(chǎn)生則要依據(jù)用戶選擇的連接模式而定:假如客戶選擇的是主動(dòng)模式(PORT),則須要用戶端供應(yīng)應(yīng)服務(wù)器一個(gè)IP地址和一個(gè)非標(biāo)準(zhǔn)端口;而假如用戶采納被動(dòng)模式(PASV),則服務(wù)器端須要供應(yīng)應(yīng)客戶端一個(gè)IP地址和一個(gè)非標(biāo)準(zhǔn)端口。下表是幾個(gè)聞名的TCP端口號(hào):表2TCP端口號(hào)TCP端口號(hào)關(guān)鍵字描述20FTP-DATA文件傳輸協(xié)議數(shù)據(jù)21FTP文件傳輸協(xié)議限制23TELENET遠(yuǎn)程登錄協(xié)議25SMTP簡潔郵件傳輸協(xié)議53DOMAIN域名服務(wù)器80HTTP超文本傳輸協(xié)議110POP3郵局協(xié)議119NNTP新聞傳送協(xié)議FTP中字節(jié)大小有兩個(gè):邏輯字節(jié)大小和用于傳輸?shù)淖止?jié)大小。后者通常是8位,而前者可不肯定是多少了。傳輸字節(jié)不必等于邏輯字節(jié)大小,也不必對(duì)數(shù)據(jù)結(jié)構(gòu)進(jìn)行說明。限制連接是建立在USER-PIT和SERVER-PI之間用于交換吩咐和應(yīng)答的通信鏈路。數(shù)據(jù)連接是傳輸數(shù)據(jù)的全雙工連接,傳輸數(shù)據(jù)可以發(fā)生在服務(wù)器DTP和用戶DTP之間也可以發(fā)生在兩個(gè)服務(wù)器DTP之間,F(xiàn)TP可以傳輸非連續(xù)的文件,這些文件的一部分稱為頁。服務(wù)器DTP代表一種傳輸過程,它通常處于“主動(dòng)”狀態(tài),它和偵聽端口建立數(shù)據(jù)連接,它還可以為傳輸和存儲(chǔ)設(shè)置參數(shù),并依據(jù)PI的指令傳輸數(shù)據(jù)。當(dāng)然,DTP也可以轉(zhuǎn)入“被動(dòng)”狀態(tài)。服務(wù)器FTP進(jìn)程,它是和用戶FTP進(jìn)程一起工作的,它由PI和DTP組成。至于用戶FTP進(jìn)程則是由PI,DTP和用戶接口組成的。具體工作模式如圖1所示:FTP懇求用戶用戶接口服務(wù)器aFTP響應(yīng)用戶用戶接口服務(wù)器a用戶a1用戶a1文件傳輸系統(tǒng)文件傳輸系統(tǒng)用戶b2數(shù)據(jù)連接文件傳輸系統(tǒng)文件傳輸系統(tǒng)用戶b2服務(wù)器b服務(wù)器b 服務(wù)器-FTP 用戶—FTP圖1FTP工作模式圖上圖中用戶PI起先限制連接,限制連接和Telnet協(xié)議很象。在起先階段,標(biāo)準(zhǔn)FTP吩咐由用戶PI產(chǎn)生并通過限制連接傳送到服務(wù)器進(jìn)程。服務(wù)器PI向用戶PI返回標(biāo)準(zhǔn)應(yīng)答。FTP吩咐指定數(shù)據(jù)連接參數(shù)和文件系統(tǒng)操作。用戶DTP在特定數(shù)據(jù)端口偵聽,服務(wù)器起先數(shù)據(jù)連接并以指定的參數(shù)起先數(shù)據(jù)傳輸。數(shù)據(jù)端口不必在起先FTP吩咐的機(jī)器上,但用戶或用戶FTP進(jìn)程必需確定它在指定的數(shù)據(jù)端口上偵聽.這個(gè)數(shù)據(jù)連接是全雙工的。2.3FTP傳輸模式FTP協(xié)議的任務(wù)是從一臺(tái)計(jì)算機(jī)將文件傳送到另一臺(tái)計(jì)算機(jī),它和這兩臺(tái)計(jì)算機(jī)所處的位置、聯(lián)接的方式、甚至是是否運(yùn)用相同的操作系統(tǒng)無關(guān)。假設(shè)兩臺(tái)計(jì)算機(jī)通過ftp協(xié)議對(duì)話,并且能訪問Internet,你可以用ftp吩咐來傳輸文件。每種操作系統(tǒng)運(yùn)用上有某一些微小差別,但是每種協(xié)議基本的吩咐結(jié)構(gòu)是相同的。FTP的傳輸有兩種方式:ASCII傳輸模式和二進(jìn)制數(shù)據(jù)傳輸模式。2.3.1ASCII傳輸方式假定用戶正在拷貝的文件包含的簡潔ASCII碼文本,假如在遠(yuǎn)程機(jī)器上運(yùn)行的不是UNIX,當(dāng)文件傳輸時(shí)ftp通常會(huì)自動(dòng)地調(diào)整文件的內(nèi)容以便于把文件說明成另外那臺(tái)計(jì)算機(jī)存儲(chǔ)文本文件的格式。但是常常有這樣的狀況,用戶正在傳輸?shù)奈募牟皇俏谋疚募?,它們可能是程序,?shù)據(jù)庫,字處理文件或者壓縮文件(盡管字處理文件包含的大部分是文本,其中也包含有指示頁尺寸,字庫等信息的非打印字符)。在拷貝任何非文本文件之前,用binary吩咐告知ftp逐字拷貝,不要對(duì)這些文件進(jìn)行處理。2.3.2二進(jìn)制傳輸方式在二進(jìn)制傳輸中,保存文件的位序,以便原始和拷貝的是逐位一一對(duì)應(yīng)的。即使目的地機(jī)器上包含位序列的文件是沒意義的。例如,macintosh以二進(jìn)制方式傳送可執(zhí)行文件到Windows系統(tǒng),在對(duì)方系統(tǒng)上,此文件不能執(zhí)行。假如你在ASCII方式下傳輸二進(jìn)制文件,即使不須要也仍會(huì)轉(zhuǎn)譯。這會(huì)使傳輸略微變慢,也會(huì)損壞數(shù)據(jù),使文件變得不能用。假如你知道這兩臺(tái)機(jī)器是同樣的,則二進(jìn)制方式對(duì)文本文件和數(shù)據(jù)文件都是有效的。3FTP客戶端總體設(shè)計(jì)3.1設(shè)計(jì)目的及工具選3.1.1設(shè)計(jì)目的FTP早已應(yīng)用在網(wǎng)絡(luò)的各個(gè)方面,比如我們?cè)谠L問網(wǎng)絡(luò)上的資源時(shí),常常會(huì)遇到須要連接FTP服務(wù)器來下載,或者你制作了一個(gè)網(wǎng)站,想要將其上傳至服務(wù)器,讓大家能夠訪問它,這個(gè)時(shí)候就會(huì)用到FTP客戶端。雖然平常運(yùn)用windows自帶的IE閱讀器即可實(shí)現(xiàn)對(duì)FTP服務(wù)器的訪問,但是IE只是個(gè)很粗糙的FTP客戶端。IE閱讀器在6.0以下的版本不支持PASV方式訪問服務(wù)器,而且IE閱讀器在登錄FTP服務(wù)器的時(shí)候,無法查看返回的信息,在出錯(cuò)的時(shí)候,無法找到錯(cuò)誤的緣由,因此在運(yùn)用上很不便利。現(xiàn)在大多數(shù)的FTP客戶端軟件都是收費(fèi)版的,而且以英文版居多,運(yùn)用上操作很困難,目前流行的有CoreFtp、AceFtp、FtpVoyager等,但是大多數(shù)用戶并不習(xí)慣運(yùn)用這些軟件。本文所設(shè)計(jì)的FTP客戶端則適合大多數(shù)用戶運(yùn)用,界面設(shè)計(jì)的很簡潔,運(yùn)用戶可以一目了然,而且具備FTP客戶端的基本功能,可以作為下載、上傳文件的工具來運(yùn)用。3.1.2設(shè)計(jì)工具程序設(shè)計(jì)中用到的主要工具就是Java,Java是SUN公司開發(fā)的一種面對(duì)對(duì)象的新一代網(wǎng)絡(luò)編程語言,它可以在各種不同的機(jī)器、操作系統(tǒng)的網(wǎng)絡(luò)環(huán)境中進(jìn)行開發(fā),具有說明型語言(如Basic語言)和編譯型語言(如C語言)的特性。Java摒棄了C++中各種弊大于利的功能和很多很少用到的功能,用Java開發(fā)的程序可以在網(wǎng)絡(luò)上傳輸,并運(yùn)行于任何客戶機(jī)上。運(yùn)用Java語言可以便利的設(shè)計(jì)出網(wǎng)絡(luò)應(yīng)用類的程序,而且Java的移植性很好,在、其應(yīng)用程序在各種機(jī)器上都能無差別的執(zhí)行為了使FTP客戶端能適應(yīng)大多數(shù)平臺(tái)下的運(yùn)用,我選擇運(yùn)用Java語言來實(shí)現(xiàn)。3.1.3ftpclient類Java類庫的存在使它適合于一個(gè)不斷發(fā)展的環(huán)境。在類庫中我們可以自由地加入新的方法和實(shí)例變量而不會(huì)影響用戶程序的執(zhí)行。并且Java通過接口來支持多重繼承,使其比嚴(yán)格的類繼承具有更敏捷的方式和擴(kuò)展性。在處理困難事物的時(shí)候,用到的一種基本手段就是抽象。抽象的目的就是區(qū)分事物之間的本質(zhì)和不同,面對(duì)對(duì)象編程(OOP)的實(shí)質(zhì)就是利用類和對(duì)象來建立抽象模型。類表示了對(duì)象的類別,是創(chuàng)建對(duì)象的藍(lán)本。建立一個(gè)事物的抽象模型,本質(zhì)上就是表達(dá)該事物的性質(zhì)和行為。運(yùn)用類來建立抽象模型,是通過在類中定義變量和方法來實(shí)現(xiàn)的。類中定義的屬性是一種可存儲(chǔ)值的變量,該變量代表著事物的具體性質(zhì)。在J2SE中供應(yīng)了和客戶端編程有關(guān)的Api,它就是.ftp.FtpClient類,F(xiàn)tpClient類封裝了FTP協(xié)議的相關(guān)指令和實(shí)現(xiàn)細(xì)微環(huán)節(jié),供應(yīng)了一系列的方法,這些方法涵蓋了幾乎全部ftp的功能運(yùn)用FtpClient類設(shè)計(jì)FTP客戶端程序可以讓編程人員輕松地實(shí)現(xiàn)登錄遠(yuǎn)程FTP服務(wù)器、閱讀服務(wù)器上的書目、設(shè)置傳輸協(xié)議、上傳文件和下載文件等功能。本文所運(yùn)用的FtpClient類的構(gòu)造方法和主要方法如下:1.PublicFtpClient(Stringhostname)此構(gòu)造函數(shù)利用給出的主機(jī)名建立一條FTP連接,運(yùn)用默認(rèn)端口號(hào)。2.PublicvoidopenServer(Stringhostname)這個(gè)方法用于建立一條和指定主機(jī)上的FTP服務(wù)器的連接,運(yùn)用默認(rèn)端口號(hào)。3.Publicvoidlogin(Stringusername,Stringpassword)此方法利用參數(shù)username和password登錄到FTP服務(wù)器。運(yùn)用過Internet的用戶應(yīng)當(dāng)知道,匿名FTP服務(wù)器的登錄用戶名為anonymous,密碼一般用自己的電子郵件地址。Publicvoidbinary():該吩咐可把傳輸格式設(shè)置為二進(jìn)制格式。3.2.1客戶端功能模塊FTP客戶端作為用戶連接FTP服務(wù)器的工具,須要具備一些基本功能模塊,如連接、上傳、下載等,其中最主要的三大功能模塊如下:1、下載功能模塊:連接用戶指定的FTP服務(wù)器,獲得服務(wù)器書目下的文件列表,當(dāng)用戶選擇項(xiàng)目為文件時(shí),點(diǎn)擊下載可以下載用戶所須要的文件。選定文件后提示用戶將文件存儲(chǔ)在何處,用戶選擇存儲(chǔ)區(qū)后起先下載任務(wù)。依靠FTP協(xié)議的支持,用戶下載的文件沒有類型和大小限制,即用戶可已選擇任何自己想要下載的文件,通過FTP客戶端進(jìn)行下載。2、上傳功能模塊:用戶可以自行選擇本機(jī)上存儲(chǔ)的文件,上傳至FTP服務(wù)器。在用戶選擇存儲(chǔ)在服務(wù)器的位置后,點(diǎn)擊上傳,選擇所須要上傳的文件,即可將文件上傳至服務(wù)器。3、連接功能模塊:將用戶本機(jī)和指定的IP地址連接,驗(yàn)證用戶命和密碼,在FTP服務(wù)器上進(jìn)行注冊(cè)。有了這三個(gè)基本的功能模塊,客戶端的基本應(yīng)用功能即可實(shí)現(xiàn)。3.2.2客戶端界面設(shè)計(jì)為了運(yùn)用戶能夠便利的運(yùn)用FTP客戶端,在設(shè)計(jì)中我將數(shù)據(jù)輸入和信息顯示整合在一個(gè)頁面中,全部客戶端僅包含一個(gè)主要的窗口,窗口中分別有以下五個(gè)界面:1、數(shù)據(jù)輸入界面:用來讓用戶輸入服務(wù)器地址,用戶名,密碼。2、服務(wù)器文件信息顯示界面:主要用來顯示服務(wù)器下存儲(chǔ)的文件,便利用戶清楚的了解服務(wù)器中存儲(chǔ)了哪些文件。3、上下載隊(duì)列顯示界面:顯示正在下載或上傳的文件線程。4、操作按鈕界面:用戶可以通過點(diǎn)擊上傳、下載、斷開、關(guān)閉等按鈕來實(shí)現(xiàn)客戶端的具體操作。5、信息顯示界面:顯示當(dāng)前連接信息和上傳下載是否勝利信息。這五個(gè)界面可以運(yùn)用eclipse工具下的swing控件來實(shí)現(xiàn),在布局時(shí),將界面內(nèi)的各個(gè)元素整合在一個(gè)框架中。設(shè)計(jì)的主界面如圖2:圖2客戶端界面3.3數(shù)據(jù)流程圖3.3.1客戶端連接流程圖運(yùn)行客戶端后,首先是連接服務(wù)器,須要輸入服務(wù)器IP地址及用戶名和密碼點(diǎn)擊連接按鈕后起先連接服務(wù)器。

下圖為客戶端連接流程圖。用戶輸入服務(wù)器地址及用戶名和密碼用戶輸入服務(wù)器地址及用戶名和密碼 連接服務(wù)器連接服務(wù)器發(fā)送用戶名及密碼至服務(wù)器在信息顯示模塊顯示連接勝利在信息顯示模塊顯示連接勝利是否連接勝利是獲得獲得服務(wù)器文件列表否刷新服務(wù)器文件顯示文件列表在信息顯示模塊顯示連接失敗刷新服務(wù)器文件顯示文件列表在信息顯示模塊顯示連接失敗圖3客戶端連接流程圖連接的結(jié)果有兩種,即圖中顯示的連接失敗和連接勝利。

3.3.2上傳子模塊流程圖當(dāng)用戶點(diǎn)擊上傳按鈕后,用戶可以選擇須要上傳的文件,并指定上傳位置,將本機(jī)上的文件上傳至FTP服務(wù)器。下圖為上傳子模塊流程圖。點(diǎn)擊上傳按鈕點(diǎn)擊上傳按鈕彈出文件選擇對(duì)話框彈出文件選擇對(duì)話框獲得獲得用戶選擇的文件名新建一個(gè)上傳任務(wù)新建一個(gè)上傳任務(wù)登錄到FTP服務(wù)器目標(biāo)登錄到FTP服務(wù)器目標(biāo)書目下上傳是否勝利上傳是否勝利彈出對(duì)話框顯示上傳勝利是重新獲得服 務(wù)器文件列表更新服務(wù)器文件列表否更新服務(wù)器文件列表清除線程彈出對(duì)話框顯示上傳失敗清除線程彈出對(duì)話框顯示上傳失敗圖4上傳模塊流程圖

上傳的結(jié)果有兩種,上傳失敗和勝利,失敗時(shí)會(huì)提示用戶上傳失敗,緣由可能是權(quán)限,假如勝利上傳,則提示上傳勝利。3.3.3下載子模塊流程圖當(dāng)用戶在服務(wù)器文件列表中選擇想要下載的文件后,選擇須要下載文件在本機(jī)上的存儲(chǔ)位置,將服務(wù)器上的文件下載至本機(jī)。下圖為上傳子模塊流程圖。

選擇要下載的文件選擇要下載的文件點(diǎn)擊下載按鈕點(diǎn)擊下載按鈕選擇文件在本機(jī)存儲(chǔ)位置獲得獲得文件信息將信息傳送至任務(wù)新建下載任務(wù)新建下載任務(wù)登錄到FTP服務(wù)器目標(biāo)登錄到FTP服務(wù)器目標(biāo)書目下下載是否勝利彈出對(duì)話框顯示下載下載是否勝利彈出對(duì)話框顯示下載勝利重新獲得服務(wù)器文 件列表更新服務(wù)器文件列表更新服務(wù)器文件列表否彈出對(duì)話框顯示下載失敗清除線程彈出對(duì)話框顯示下載失敗清除線程圖5下載模塊流程圖4FTP客戶端程序?qū)崿F(xiàn)4.1.1數(shù)據(jù)輸入界面具體設(shè)計(jì)該界面用來記錄用來輸入服務(wù)器的站點(diǎn),用戶名和密碼信息,然后將信息發(fā)送到服務(wù)器進(jìn)行驗(yàn)證,利用Jtextfiled構(gòu)件來實(shí)現(xiàn)??蛻舳艘还灿?個(gè)文本輸入框,分別為服務(wù)器地址輸入框url,用戶名輸入框username,密碼輸入框password和端口號(hào)port。在程序運(yùn)行時(shí),用戶在輸入框url中輸入的FTP服務(wù)器站點(diǎn)、用戶在輸入框username中輸入的用戶名、用戶在輸入框password中輸入密碼,用戶在端口號(hào)輸入框port中輸入端口號(hào)。利用getTEXT()函數(shù)獲得輸入框中的數(shù)據(jù),將url中的數(shù)據(jù)存儲(chǔ)至ip中,將username中的數(shù)據(jù)存儲(chǔ)至username中;假如用戶沒有在username中輸入數(shù)據(jù),則默認(rèn)為用戶運(yùn)用匿名方式登錄,將用戶名設(shè)置為designpattern,password中的數(shù)據(jù)則存儲(chǔ)至password,如果用戶沒有在password中輸入數(shù)據(jù),則默認(rèn)設(shè)置為designpattern。JTextField類的定義:JTextFieldurl=newJTextField();服務(wù)器IP輸入框JTextFieldusername=newJTextField();用戶名輸入框JTextFieldpassword=newJTextField();密碼輸入框JTextFieldport=newJTextField();端口號(hào)輸入框4.1.2服務(wù)器文件信息顯示界面具體設(shè)計(jì)該界面的作用是是顯示服務(wù)器文件列表,利用Jscrollpane構(gòu)件來實(shí)現(xiàn)。在客戶端主界面創(chuàng)建一個(gè)Jscrollpane,命名為ftpFileScrollPane1,并置于主界面中間,該表格包括三個(gè)數(shù)據(jù)項(xiàng):文件名file,文件大小filesizes,修改日期filedates,運(yùn)用一個(gè)二維數(shù)組mydata來存儲(chǔ)這三個(gè)數(shù)據(jù)。當(dāng)客戶端連接上服務(wù)器時(shí),表格數(shù)據(jù)自動(dòng)更新,主要功能運(yùn)用setTableData()函數(shù)實(shí)現(xiàn)。當(dāng)服務(wù)器連接時(shí)首先清除文件列表信息,利用removeAllElements()函數(shù)實(shí)現(xiàn),然后切換到當(dāng)前書目,運(yùn)用ftpClient類中的cd吩咐實(shí)現(xiàn),再運(yùn)用list吩咐前書目下的數(shù)據(jù)、包括書目和文件名。JScrollPane類的定義:JScrollPaneftpFileScrollPane1=newJScrollPane(ftpFileInfosTable);4.1.3上下載隊(duì)列顯示界面和信息顯示界面具體設(shè)計(jì)這兩個(gè)模塊是信息顯示模塊,運(yùn)用JScrollPane和JTextArea構(gòu)件實(shí)現(xiàn)。其中taskScrollPan顯示上傳下載進(jìn)程信息,consoleScrollPane顯示連進(jìn)程起先或結(jié)束信息,將信息顯示的文本域consoleTextArea放在滾動(dòng)條面板consoleScrollPane中,并且設(shè)置為不行編輯。當(dāng)客戶端連接成功或失敗,上傳文件或下載文件時(shí),利用函數(shù)taskScrollPane.append()和consoleTextArea.append()在相應(yīng)的區(qū)域顯示任務(wù)信息。JScrollPane類的定義:JScrollPanetaskScrollPane=newJScrollPane(taskList);JScrollPaneconsoleScrollPane=newJScrollPane(consoleTextArea);4.1.4操作按鈕模塊具體設(shè)計(jì)操作按鈕運(yùn)用JButton構(gòu)件實(shí)現(xiàn),客戶端共有連接、上傳、下載、斷開、關(guān)閉、上一級(jí)目、錄刷、新重命名8個(gè)操作按鈕,分別命名為connectButton、closeButton、refreshButton、deleteButton、downloadButton、uploadButtonrenameButton、upDirButton。JButton類的定義:privateJButtonconnectButton=newJButton("連接"); privateJButtoncloseButton=newJButton("斷開連接"); privateJButtonrefreshButton=newJButton("刷新"); privateJButtondeleteButton=newJButton("刪除"); privateJButtondownloadButton=newJButton("下載"); privateJButtonuploadButton=newJButton("上傳"); privateJButtonrenameButton=newJButton("重命名"); privateJButtonupDirButton=newJButton("上級(jí)書目");每個(gè)按鈕都有自己的響應(yīng)事務(wù)來實(shí)現(xiàn)各自的功能,分別如下連接:connectButton.addActionListener()...上傳:uploadButton.addActionListener(newActionListener()...下載:downloadButton.addActionListener(newActionListener()...刪除:deleteButton.addActionListener(newActionListener()...斷開:closeButton.addActionListener(newActionListener()...上一級(jí)書目:upDirButton.addActionListener(newActionListener()...刷新:refreshButton.addActionListener(newActionListener()...重命名:renameButton.addActionListener(newActionListener()...各按鈕在定義各自的響應(yīng)后,用戶在點(diǎn)擊這些按鈕時(shí),會(huì)做出相應(yīng)的處理,啟動(dòng)對(duì)應(yīng)的進(jìn)程。4.2功能模塊實(shí)現(xiàn)4.2.1連接服務(wù)器客戶端中FtpBean類中connect方法用來實(shí)現(xiàn)連接服務(wù)器功能,在Java中實(shí)現(xiàn)這一功能是借助FtpClient類完成的,首先是運(yùn)用FtpClient類的openServer(stringserver)方法打開遠(yuǎn)程FTP服務(wù)器,然后運(yùn)用FtpClient類的login(user,password)方法登錄服務(wù)器。登錄遠(yuǎn)程FTP服務(wù)器有兩種方式,一種是注冊(cè)用戶登錄,另一種是以匿名方式登錄。運(yùn)用第一種方式登錄須要擁有該服務(wù)器的注冊(cè)用戶名和密碼,匿名方式則是以designpattern作為用戶名來登錄。類ftpClient供應(yīng)了如下兩個(gè)可用于打開和FTP服務(wù)器之間的連接的方法1.openServer(Stringhostname)用于建立一條和指定主機(jī)上的FTP服務(wù)器的連接,運(yùn)用默認(rèn)端口號(hào):212.connect(Stringdir,Stringhostname,intport,Stringusername,Stringpasswd)用于建立一條和指定主機(jī)、指定端口上的FTP服務(wù)器的連接。本文所運(yùn)用的是第一種方法進(jìn)行連接,首先定義4個(gè)字符串,命名為ip,username,port,password,分別用來接收來自數(shù)據(jù)輸入界面的數(shù)據(jù)。然后將接收到的數(shù)據(jù)發(fā)送至服務(wù)器驗(yàn)證,驗(yàn)證勝利則運(yùn)用對(duì)話框函數(shù)在信息顯示界面中提示連接勝利,失敗則顯示連接失敗。4.2.2上傳文件客戶端中實(shí)現(xiàn)上傳功能的文件為FtpBean類中的uploadFile函數(shù)來實(shí)現(xiàn)。當(dāng)用戶選擇文件上傳時(shí),客戶端會(huì)創(chuàng)建一個(gè)到FTP服務(wù)器的連接,同樣運(yùn)用ftpClient類的openServer()方法和login()登錄到服務(wù)器,并切換到用戶選擇的目標(biāo)書目下,把傳輸格式設(shè)置為二進(jìn)制格式,將本地文件上傳至FTP服務(wù)器。上傳結(jié)束后利用ftpClient.closeServer()函數(shù)斷開,并更新數(shù)據(jù)表格和清除任務(wù)線程。一般狀況下FTP服務(wù)器為了保證其平安性,權(quán)限中會(huì)設(shè)置是否允許用戶上傳文件。上傳失敗時(shí),出錯(cuò)處理睬在對(duì)話框面板中顯示出文件上傳失敗。上傳的具體代碼見附錄。4.2.3下載文件客戶端下載文件由為FtpBean類中的downloadFile函數(shù)來實(shí)現(xiàn)。假如用戶想要下載列表中的某一個(gè)文件,首先推斷項(xiàng)目的類型是否是文件,假如是文件,則得到下載的文件名并下載文件,假如選中的是書目,則不能下載。用戶選擇好要下載的文件后,客戶端打開服務(wù)器連接端口,運(yùn)用ftpClient類的openServer()方法和login()登錄到服務(wù)器,把傳輸格式設(shè)置為二進(jìn)制格式,運(yùn)用ftpClient.get()函數(shù)獲得文件名,下載并保存至用戶指定的路徑。下載完成后ftpClient.closeServer()關(guān)閉和服務(wù)器的連接并清除線程。當(dāng)用戶下載失敗時(shí),出錯(cuò)處理睬在信息顯示面板中顯示下載出錯(cuò)。下載的具體代碼見附錄。5功能運(yùn)行測(cè)試為了驗(yàn)證程序是否能正常運(yùn)行,我選擇連接IP為29的FTP服務(wù)器來測(cè)試。運(yùn)行環(huán)境為windows7+eclipse。首先是服務(wù)器連接的驗(yàn)證:在服務(wù)器地址中輸入29,在用戶名中輸入designpattern,在密碼欄中輸入designpattern,點(diǎn)擊連接按鈕后,出現(xiàn)結(jié)果如下圖:結(jié)果顯示連接功能實(shí)現(xiàn),服務(wù)器文件信息列表中顯示了ip為29的FTP服務(wù)器下的文件夾列表,信息顯示中顯示了正確的連接信息。然后是下載文件功能的測(cè)試,選擇程序設(shè)計(jì)模式封頁.doc文件,點(diǎn)擊下載選擇保存至D盤,如圖:接著點(diǎn)擊保存按鈕,下載任務(wù)中勝利添加下載任務(wù),文件下載完后,如圖:最終是上傳功能測(cè)試。先在本機(jī)上創(chuàng)建一個(gè)名叫“程序設(shè)計(jì)模式封頁.doc”的文件,選擇上傳至跟書目下,點(diǎn)擊上傳,顯示如圖:為了驗(yàn)證是否真的上傳至FTP服務(wù)器,我用網(wǎng)上鄰居訪問了IP為29的FTP服務(wù)器,結(jié)果如圖:文件的確上傳勝利。至此,功能驗(yàn)證已經(jīng)完畢!6.結(jié)語FTP的目標(biāo)是提高文件的共享性和牢靠高效地傳送數(shù)據(jù),而FTP客戶端的作用是運(yùn)用戶便利的連接和訪問FTP服務(wù)器。本文實(shí)現(xiàn)了一個(gè)簡潔易用的FTP客戶端,在分析FTP協(xié)議的基本工作原理和FTP的數(shù)據(jù)傳輸原理的基礎(chǔ)上,具體介紹了如何運(yùn)用Java工具對(duì)FTP客戶端進(jìn)行設(shè)計(jì),選擇Java類庫來實(shí)現(xiàn)FTP客戶端程序的上傳下載等主要功能,并用eclipse軟件供應(yīng)的一個(gè)支持可視化編程的開發(fā)環(huán)境,從而實(shí)現(xiàn)了對(duì)FTP客戶端的開發(fā)。雖然現(xiàn)在有很多實(shí)現(xiàn)FTP客戶端程序的技術(shù)和方法,諸如Winsock控件和Delphi的Indy組件等,但是運(yùn)用Java在程序?qū)崿F(xiàn)上顯得更加簡捷敏捷,并具有較好的可擴(kuò)充性和可移植性,在本文中運(yùn)用的方法也是比較便捷和高效的。參考文獻(xiàn)[1]楊錫林、張燕等.Java編程高手.北京高校出版社,2000年12月第一版(1):169~173.[2]葉新銘等譯.計(jì)算機(jī)網(wǎng)絡(luò)(原書其次版).機(jī)械工業(yè)出版社,2001年6月:端到端協(xié)議242-283.[3]夏先波等.JAVA+JDK實(shí)例開發(fā)寶典.電子工業(yè)出版社,2001年第一版:第13章.網(wǎng)絡(luò)編程281~289.[4]J.Reynolds.RequestforComments:959:FileTransferProtocol,October1985,:THEFTPMODEL7~8.[5]葉俊民.軟件工程.清華高校出版社,2006年6月第一版:第3章.軟件需求分析基礎(chǔ)51~73.[6]Horstmann,C.S,Cornell,G.Java2核心技術(shù).機(jī)械工業(yè)出版社,2006年3月第一版:第6章.高級(jí)Swing279~385[7]楊淑萍基于Java的FTP客戶端程序的設(shè)計(jì)和實(shí)現(xiàn).現(xiàn)代計(jì)算機(jī).[8]謝希仁計(jì)算機(jī)網(wǎng)絡(luò)(第五版)電子工業(yè)出版社

附錄:程序源碼,主要核心代碼:FTPFrame.javapublicvoidconnect()//連接FTP服務(wù)器 { Strings=ftp.connect("/",url.getText().toString(),Integer.parseInt(port.getText()),username.getText().toString(),password.getText().toString()); status.setText(s); update(); if(s.equals("Success")) { time=newDate(); out.println(time+"登陸服務(wù)器:"+url.getText()); connectButton.setEnabled(false); closeButton.setEnabled(true); } else { JOptionPane.showMessageDialog(null,s); connectButton.setEnabled(true); closeButton.setEnabled(false); } } publicvoiduploadFile()//上傳文件 { JFileChooserfDialog=newJFileChooser(); //文件選擇器 intresult=fDialog.showOpenDialog(null); if(result==JFileChooser.APPROVE_OPTION) { Stringfile=fDialog.getSelectedFile().toString(); StringtargetFile=newString(); StringTokenizerst=newStringTokenizer(file,"\\"); //拆分文件名 while(st.hasMoreTokens()) { targetFile=st.nextToken(); } booleanb=ftp.uploadFile(file,targetFile); if(b==true) { update(); status.setText("上傳文件"+targetFile+"勝利"); JOptionPane.showMessageDialog(null,"上傳文件"+targetFile+"勝利"); time=newDate(); out.println(time+"上傳文件:"+targetFile+"勝利"); } else { status.setText("上傳文件"+targetFile+"失敗"); JOptionPane.showMessageDialog(null,"上傳文件"+targetFile+"失敗"); out.println(time+"上傳文件:"+targetFile+"失敗"); } } } publicvoiddownloadFile()//下載文件 { if(!fileList.isSelectionEmpty()) { StringtargetFile=fileList.getSelectedValue().toString(); //獲得所選擇的文件 JFileChooserfDialog=newJFileChooser(); //文件選擇器 intresult=fDialog.showOpenDialog(null); if(result==JFileChooser.APPROVE_OPTION) { ftp.downloadFile(targetFile,fDialog.getSelectedFile().toString()); update(); status.setText("下載文件"+targetFile+"勝利"); JOptionPane.showMessageDialog(null,"下載文件"+targetFile+"勝利"); time=newDate(); out.println(time+"下載文件:"+targetFile); } } else { JOptionPane.showMessageDialog(null,"請(qǐng)選擇所要下載的文件"); } }publicvoidclose(){//關(guān)閉連接 Strings=ftp.close(); status.setText(s); m.removeAllElements(); time=newDate(); out.println(time+"離開服務(wù)器:"+url.getText()); out.close(); connectButton.setEnabled(true); closeButton.setEnabled(false);}FtpBean.java//打開連接publicStringconnect(Stringdir,Stringhostname,intport,Stringusername,Stringpasswd){Stringmsg="";try{ftpClient=newFtpClient(hostname,port);ftpClient.login(username,passwd);ftpClient.binary();msg="Success";}catch(FtpLoginExceptione){msg="登錄主機(jī)失敗,可能是用戶名密碼錯(cuò)誤!";ftpClient=null;}catch(IOExceptione){msg="登錄主機(jī)失敗,請(qǐng)檢驗(yàn)端品是否正確!";ftpClient=null;}catch(SecurityExceptione){msg="無權(quán)連接主機(jī),主確認(rèn)是否有權(quán)限連接主機(jī)!";ftpClient=null;}returnmsg;}//上傳文件publicbooleanuploadFile(StringlocalFile,StringtargetFileName){booleanresult=false;if(this.ftpClient==null){returnfalse;}TelnetOutputStreamtos=null;RandomAccessFilesendFile=null;DataOutputStreamdos=null;try{Filefile=newFile(localFile);sendFile=newRandomAccessFile(file,"r");sendFile.seek(0);tos=this.ftpClient.put(targetFileName);dos=newDataOutputStream(tos);intch=0;while(sendFile.getFilePointer()<sendFile.length()){ch=sendFile.read();dos.write(ch);}result=true;}catch(Exceptionex){result=false;}finally{if(tos!=null){try{tos.close();}catch(IOExceptione){e.printStackTrace();}}if(dos!=null){try{dos.close();}catch(IOExceptione){e.printStackTrace();}}if(sendFile!=null){try{sendFile.close(

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論