版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、<p><b> 目錄</b></p><p> 摘要..........................................................2</p><p> 關鍵詞........................................................2</p><p>
2、; 1.引言........................................................2</p><p> 2.FTP協(xié)議分析.................................................2</p><p> 2.1FTP工作原理.........................................
3、....2</p><p> 2.2FTP工作模式.............................................4</p><p> 2.3FTP傳輸模式.............................................6</p><p> 2.3.1ASCII傳輸方式....................
4、.................6</p><p> 2.3.2二進制傳輸方式....................................6</p><p> 3.FTP客戶端的總體設計.........................................6</p><p> 3.1設計目的及工具的選擇................
5、....................6</p><p> 3.1.1設計目的..........................................6</p><p> 3.1.2設計工具..........................................7</p><p> 3.1.3FtpClient類...........
6、............................7</p><p> 3.2客戶端主要模塊設計......................................7</p><p> 3.2.1客戶端功能模塊....................................8</p><p> 3.2.2客戶端界面設計..........
7、..........................9</p><p> 3.3數(shù)據(jù)流程圖..............................................9</p><p> 3.3.1客戶端連接流程圖..................................9</p><p> 3.3.2上傳子模塊流程圖........
8、..........................11</p><p> 3.3.3下載子模塊流程圖.................................12</p><p> 4.FTP客戶端程序實現(xiàn)...........................................14</p><p> 4.1客戶端顯示界面實現(xiàn)......
9、...............................14</p><p> 4.1.1數(shù)據(jù)輸入界面詳細設計.............................14</p><p> 4.1.2服務器文件信息顯示界面詳細設計...................14</p><p> 4.1.3上下載隊列顯示界面和信息顯示界面詳細設計......
10、...15</p><p> 4.1.4操作按鈕模塊詳細設計.............................15</p><p> 4.2功能模塊實現(xiàn)...........................................16</p><p> 4.2.1連接服務器....................................
11、...16</p><p> 4.2.2上傳文件.........................................16</p><p> 4.2.3下載文件.........................................17</p><p> 功能運行測試....................................
12、............17</p><p> 6.結語........................................................20</p><p> 參考文獻......................................................21</p><p> 附錄.............
13、.............................................22</p><p> FTP客戶端的設計與實現(xiàn)</p><p> 摘要:FTP是Internet上用來傳送文件的協(xié)議。它是為了我們能夠在Internet上互相傳送文件而制定的文件傳送標準,規(guī)定了Internet上文件如何傳送。通過FTP協(xié)議,我們就可以跟Internet上的FTP服務器進行文件的
14、上傳或下載。本文以實現(xiàn)一個簡單易用的FTP客戶端為目標,通過分析FTP協(xié)議的基本工作原理和FTP的數(shù)據(jù)傳輸原理,研究如何使用Java工具對FTP客戶端進行設計,選擇Java類庫中的FtpClient類來實現(xiàn)FTP客戶端程序的上傳下載等主要功能,并用eclipse軟件提供的一個支持可視化編程的開發(fā)環(huán)境,從而實現(xiàn)了對FTP客戶端的開發(fā)。</p><p> 關鍵詞:FTP協(xié)議 ,工作原理,F(xiàn)tpClient,上傳下載
15、</p><p><b> 引言</b></p><p> 目前,F(xiàn)TP服務已經(jīng)是網(wǎng)絡上廣泛使用的一種服務了,它是建立在FTP協(xié)議上的用于網(wǎng)絡環(huán)境下進行文件傳輸?shù)囊环N文件傳輸系統(tǒng),幾乎可以傳輸各種類型的文件,如文本文件,聲音文件,圖像文件等。一個文件傳輸系統(tǒng)有服務器端程序和客戶端程序共同組成的,客戶端程序提供用戶操作的界面并完成文件的上傳和下載。在網(wǎng)絡應用中,F(xiàn)T
16、P有著非常重要的地位,在Internet中一個十分重要的就是資源,而各種各樣的資源大多數(shù)都是放在FTP服務器中的,為了獲得這些資源,我們必須使用FTP客戶端軟件。目前流行的有cuteFTP,WS_FTP,ByteCatcher,F(xiàn)TP Voyage等。為了方便用戶的使用,本文將介紹一種基于Java的FTP客戶端程序的設計與實現(xiàn)。 </p><p> 本文首先分析了FTP協(xié)議,F(xiàn)TP的工作原理等,然后介紹了如何使
17、用Java工具來設計和實現(xiàn)一個簡單的FTP客戶端。使用本FTP客戶端,可以使用戶輕松的下載、上傳網(wǎng)絡資源。</p><p><b> FTP協(xié)議分析</b></p><p> 2.1FTP的工作原理</p><p> FTP(FileTransferProtocol),是文件傳輸協(xié)議的簡稱。用于Internet上的控制文件的雙向傳輸。同時
18、,它也是一個應用程序。用戶可以通過它把自己機器與世界各地所有運行FTP協(xié)議的服務器相連,訪問服務器上的資源和信息。</p><p> FTP協(xié)議在TCP/IP協(xié)議棧中的位置如表1:</p><p> 表1 TCP/IP協(xié)議棧</p><p> 當啟動FTP從遠程計算機拷貝文件時,事實上啟動了兩個程序:一個本地機器上的FTP客戶端程序,它向FTP服務器提出拷貝文
19、件的請求。另一個是啟動在遠程計算機的上的FTP服務器程序,它響應請求把你指定的文件傳送到你的計算機中。FTP采 用“客戶端/服務器”方式,用戶要在自己的本地計算機上安裝FTP客戶端程序。</p><p> 從根本上說,F(xiàn)TP協(xié)議就是在網(wǎng)絡中各種不同的計算機之間按照TCP/IP協(xié)議來傳輸文件。FTP協(xié)議采用客戶端/服務器(Client/Sever)模式,由FTP客戶端程序和FTP服務器端程序組成。使用時,先啟動F
20、TP客戶端程序與遠程主機建立連接,然后向遠程主機發(fā)出傳輸命令,遠程主機在收到命令后就給予響應,并執(zhí)行正確的命令。但是FTP有一個根本的限制,那就是,如果用戶在某個主機上沒有注冊獲得授權,即沒有用戶名和口令,就不能與該主機進行文件傳輸。但匿名FTP服務器除外,它能夠使用戶與遠程主機建立連接并以匿名身份從遠程主機上拷貝文件,而不必是該遠程主機的注冊用戶。用戶使用特殊的用戶名“Anonymous”或“guest”就可有限制地訪問遠程主機上公開
21、的文件?,F(xiàn)在許多系統(tǒng)要求用戶將Emai1地址作為口令,以便更好地對訪問者進行跟綜。出于安全的目的,大部分匿名FTP主機一般只允許遠程用戶下載文件,而不允許上載文件。也就是說,用戶只能從匿名FTP主機拷貝其需要的文件而不能把文件拷貝到匿名FTP主機。另外,匿名FTP主機還采用了其他一些保護措施以保護自己的文件不至于被用戶修改和刪除,并防止計算機病毒的侵</p><p> 2.2 FTP工作模式</p>
22、<p> FTP采用C/S(客戶端/服務器)模式進行通信,但與其他的C/S模式網(wǎng)絡通信協(xié)議又有一個很大的區(qū)別。通常在進行HTTP通信或是TELNET通信的時候,只需要一個端口進行通信。即客戶端只需要連接一個端口進行數(shù)據(jù)通信。如TELNET的默認端口是23,用戶從頭到尾都只需使用這個端口。但是FTP通信除了有一個默認端口21之外,還需要其他的端口。其中默認端口(21)主要進行控制連接,進行命令協(xié)議和服務器端的響應碼的傳輸;
23、另外一個非標準端口主要進行數(shù)據(jù)傳遞,如文件的上載、下載等。至于非標準端口的產(chǎn)生則要根據(jù)用戶選擇的連接模式而定:如果客戶選擇的是主動模式(PORT),則需要用戶端提供給服務器一個IP地址和一個非標準端口;而如果用戶采用被動模式(PASV),則服務器端需要提供給客戶端一個IP地址和一個非標準端口。</p><p> 下表是幾個著名的TCP端口號:</p><p><b> 表2
24、TCP端口號</b></p><p> FTP中字節(jié)大小有兩個:邏輯字節(jié)大小和用于傳輸?shù)淖止?jié)大小。后者通常是8位 ,而前者可不一定是多少了。傳輸字節(jié)不必等于邏輯字節(jié)大小,也不必對數(shù)據(jù)結構進行解釋??刂七B接是建立在USER-PIT和SERVER-PI之間用于交換命令與應答的通信鏈路。數(shù)據(jù)連接是傳輸數(shù)據(jù)的全雙工連接,傳輸數(shù)據(jù)可以發(fā)生在服務器DTP和用戶DTP之間也可以發(fā)生在兩個服務器DTP之間,F(xiàn)TP可
25、以傳輸非連續(xù)的文件,這些文件的一部分稱為頁。服務器DTP代表一種傳輸過程,它通常處于“主動”狀態(tài),它和偵聽端口建立數(shù)據(jù)連接,它還可以為傳輸和存儲設置參數(shù),并根據(jù)PI的指令傳輸數(shù)據(jù)。當然,DTP也可以轉入“被動”狀態(tài)。服務器FTP進程,它是和用戶FTP進程一起工作的,它由PI和DTP組成。至于用戶FTP進程則是由PI,DTP和用戶接口組成的。</p><p> 具體工作模式如圖1所示:</p>&l
26、t;p><b> FTP請求</b></p><p><b> FTP響應</b></p><p><b> 數(shù)據(jù)連接</b></p><p> 服務器-FTP用戶—FTP</p><p> 圖1FTP工作模式圖</p><p>
27、; 上圖中用戶PI開始控制連接,控制連接與Telnet協(xié)議很象。在開始階段,標準FTP命令由用戶PI產(chǎn)生并通過控制連接傳送到服務器進程。服務器PI向用戶PI返回標準應答。FTP命令指定數(shù)據(jù)連接參數(shù)和文件系統(tǒng)操作。用戶DTP在特定數(shù)據(jù)端口偵聽,服務器開始數(shù)據(jù)連接并以指定的參數(shù)開始數(shù)據(jù)傳輸。數(shù)據(jù)端口不必在開始FTP命令的機器上,但用戶或用戶FTP進程必須確定它在指定的數(shù)據(jù)端口上偵聽.這個數(shù)據(jù)連接是全雙工的。</p><
28、p> 2.3FTP傳輸模式</p><p> FTP協(xié)議的任務是從一臺計算機將文件傳送到另一臺計算機,它與這兩臺計算機所處的位置、聯(lián)接的方式、甚至是是否使用相同的操作系統(tǒng)無關。假設兩臺計算機通過ftp協(xié)議對話,并且能訪問Internet,你可以用ftp命令來傳輸文件。每種操作系統(tǒng)使用上有某一些細微差別,但是每種協(xié)議基本的命令結構是相同的。FTP的傳輸有兩種方式:ASCII傳輸模式和二進制數(shù)據(jù)傳輸模式。&
29、lt;/p><p> 2.3.1 ASCII傳輸方式</p><p> 假定用戶正在拷貝的文件包含的簡單ASCII碼文本,如果在遠程機器上運行的不是UNIX,當文件傳輸時ftp通常會自動地調整文件的內容以便于把文件解釋成另外那臺計算機存儲文本文件的格式。但是常常有這樣的情況,用戶正在傳輸?shù)奈募牟皇俏谋疚募?,它們可能是程序,?shù)據(jù)庫,字處理文件或者壓縮文件(盡管字處理文件包含的大部分是文
30、本,其中也包含有指示頁尺寸,字庫等信息的非打印字符)。在拷貝任何非文本文件之前,用binary命令告訴ftp逐字拷貝,不要對這些文件進行處理。</p><p> 2.3.2二進制傳輸方式</p><p> 在二進制傳輸中,保存文件的位序,以便原始和拷貝的是逐位一一對應的。即使目的地機器上包含位序列的文件是沒意義的。例如,macintosh以二進制方式傳送可執(zhí)行文件到Windows系統(tǒng),
31、在對方系統(tǒng)上,此文件不能執(zhí)行。如果你在ASCII方式下傳輸二進制文件,即使不需要也仍會轉譯。這會使傳輸稍微變慢,也會損壞數(shù)據(jù),使文件變得不能用。如果你知道這兩臺機器是同樣的,則二進制方式對文本文件和數(shù)據(jù)文件都是有效的。</p><p> 3 FTP客戶端總體設計</p><p> 3.1設計目的及工具選</p><p> 3.1.1 設計目的</p>
32、;<p> FTP早已應用在網(wǎng)絡的各個方面,比如我們在訪問網(wǎng)絡上的資源時,經(jīng)常會遇到需要連接FTP服務器來下載,或者你制作了一個網(wǎng)站,想要將其上傳至服務器,讓大家能夠訪問它,這個時候就會用到FTP客戶端。雖然平時使用windows自帶的IE瀏覽器即可實現(xiàn)對FTP服務器的訪問,但是IE只是個很粗糙的FTP客戶端。IE瀏覽器在6.0以下的版本不支持PASV方式訪問服務器,而且IE瀏覽器在登錄FTP服務器的時候,無法查看返回的
33、信息,在出錯的時候,無法找到錯誤的原因,因此在使用上很不方便?,F(xiàn)在大多數(shù)的FTP客戶端軟件都是收費版的,而且以英文版居多,使用上操作很復雜,目前流行的有CoreFtp、AceFtp、FtpVoyager等,但是大多數(shù)用戶并不習慣使用這些軟件。本文所設計的FTP客戶端則適合大多數(shù)用戶使用,界面設計的很簡單,使用戶可以一目了然,而且具備FTP客戶端的基本功能,可以作為下載、上傳文件的工具來使用。</p><p>
34、3.1.2 設計工具</p><p> 程序設計中用到的主要工具就是Java,Java是SUN公司開發(fā)的一種面向對象的新一代網(wǎng)絡編程語言,它可以在各種不同的機器、操作系統(tǒng)的網(wǎng)絡環(huán)境中進行開發(fā),具有解釋型語言(如Basic語言)和編譯型語言(如C語言)的特性。Java摒棄了C++中各種弊大于利的功能和許多很少用到的功能,用Java開發(fā)的程序可以在網(wǎng)絡上傳輸,并運行于任何客戶機上。使用Java語言可以方便的設計出網(wǎng)
35、絡應用類的程序,而且Java的移植性很好,在 、其應用程序在各種機器上都能無差別的執(zhí)行為了使FTP客戶端能適應大多數(shù)平臺下的使用,我選擇使用Java語言來實現(xiàn)。</p><p> 3.1.3 ftpclient類</p><p> Java類庫的存在使它適合于一個不斷發(fā)展的環(huán)境。在類庫中我們可以自由地加入新的方法和實例變量而不會影響用戶程序的執(zhí)行。并且Java通過接口來支持多重繼承,使
36、其比嚴格的類繼承具有更靈活的方式和擴展性。在處理復雜事物的時候,用到的一種基本手段就是抽象。抽象的目的就是區(qū)別事物之間的本質和不同,面向對象編程(OOP)的實質就是利用類和對象來建立抽象模型。類表示了對象的類別,是創(chuàng)建對象的藍本。建立一個事物的抽象模型,本質上就是表達該事物的性質和行為。使用類來建立抽象模型,是通過在類中定義變量和方法來實現(xiàn)的。類中定義的屬性是一種可存儲值的變量,該變量代表著事物的具體性質。</p><
37、;p> 在J2SE中提供了與客戶端編程有關的Api,它就是sun.net.ftp.FtpClient類,F(xiàn)tpClient類封裝了FTP協(xié)議的相關指令與實現(xiàn)細節(jié),提供了一系列的方法,這些方法涵蓋了幾乎所有ftp的功能使用FtpClient類設計FTP客戶端程序可以讓編程人員輕松地實現(xiàn)登錄遠程FTP服務器、瀏覽服務器上的目錄、設置傳輸協(xié)議、上傳文件和下載文件等功能。</p><p> 本文所使用的FtpC
38、lient類的構造方法和主要方法如下:1.PublicFtpClient(Stringhostname)</p><p> 此構造函數(shù)利用給出的主機名建立一條FTP連接,使用默認端口號。</p><p> 2.PublicvoidopenServer(Stringhostname)</p><p> 這個方法用于建立一條與指定主機上的FTP服務器的連接,使用默
39、認端口號。</p><p> 3.Publicvoidlogin(Stringusername,Stringpassword)</p><p> 此方法利用參數(shù)username和password登錄到FTP服務器。使用過Internet的用戶應該知道,匿名FTP服務器的登錄用戶名為anonymous,密碼一般用自己的電子郵件地址。Publicvoidbinary():該命令可把傳輸格式
40、設置為二進制格式。</p><p> 3.2.1客戶端功能模塊</p><p> FTP客戶端作為用戶連接FTP服務器的工具,需要具備一些基本功能模塊,如連接、上傳、下載等,其中最主要的三大功能模塊如下:</p><p> 1、下載功能模塊:連接用戶指定的FTP服務器,獲取服務器目錄下的文件列表,</p><p> 當用戶選擇項目為文
41、件時,點擊下載可以下載用戶所需要的文件。選定文件后提示用戶將文件存儲在何處,用戶選擇存儲區(qū)后開始下載任務。依靠FTP協(xié)議的支持,用戶下載的文件沒有類型和大小限制,即用戶可已選擇任何自己想要下載的文件,通過FTP客戶端進行下載。</p><p> 2、上傳功能模塊:用戶可以自行選擇本機上存儲的文件,上傳至FTP服務器。</p><p> 在用戶選擇存儲在服務器的位置后,點擊上傳,選擇所需
42、要上傳的文件,即可將文件上傳至服務器。</p><p> 3、連接功能模塊:將用戶本機與指定的IP地址連接,驗證用戶命和密碼,在</p><p> FTP服務器上進行注冊。</p><p> 有了這三個基本的功能模塊,客戶端的基本應用功能即可實現(xiàn)。</p><p> 3.2.2客戶端界面設計</p><p>
43、 為了使用戶能夠方便的使用FTP客戶端,在設計中我將數(shù)據(jù)輸入和信息顯示整合在一個頁面中,全部客戶端僅包含一個主要的窗口,窗口中分別有以下五個界面:</p><p> 1、數(shù)據(jù)輸入界面:用來讓用戶輸入服務器地址,用戶名,密碼。</p><p> 2、服務器文件信息顯示界面:主要用來顯示服務器下存儲的文件,方便用戶清</p><p> 楚的了解服務器中存儲了哪些文
44、件。</p><p> 3、上下載隊列顯示界面:顯示正在下載或上傳的文件線程。</p><p> 4、操作按鈕界面:用戶可以通過點擊上傳、下載、斷開、關閉等按鈕來實現(xiàn)客</p><p><b> 戶端的具體操作。</b></p><p> 5、信息顯示界面:顯示當前連接信息和上傳下載是否成功信息。這五個界面可以使
45、用eclipse工具下的swing控件來實現(xiàn),在布局時,將界面內的各個元素整合在一個框架中。</p><p> 設計的主界面如圖2:</p><p><b> 圖2 客戶端界面</b></p><p><b> 3.3數(shù)據(jù)流程圖</b></p><p> 3.3.1 客戶端連接流程圖<
46、/p><p> 運行客戶端后,首先是連接服務器,需要輸入服務器IP地址及用戶名和密碼點擊連接按鈕后開始連接服務器。</p><p> 下圖為客戶端連接流程圖。</p><p><b> 發(fā)送用戶名及</b></p><p><b> 密碼至服務器</b></p><p>
47、<b> 是</b></p><p><b> 否</b></p><p> 圖3 客戶端連接流程圖</p><p> 連接的結果有兩種,即圖中顯示的連接失敗和連接成功。</p><p> 3.3.2 上傳子模塊流程圖</p><p> 當用戶點擊上傳按鈕后,用戶
48、可以選擇需要上傳的文件,并指定上傳位置,將本機上的文件上傳至FTP服務器。下圖為上傳子模塊流程圖。</p><p><b> 是</b></p><p> 重新獲取服 務器文件列表</p><p><b> 否</b></p><p> 圖4 上傳模塊流程圖</p>&l
49、t;p> 上傳的結果有兩種,上傳失敗和成功,失敗時會提示用戶上傳失敗,原因可能是權限,如果成功上傳,則提示上傳成功。</p><p> 3.3.3 下載子模塊流程圖</p><p> 當用戶在服務器文件列表中選擇想要下載的文件后,選擇需要下載文件在本機上</p><p> 的存儲位置,將服務器上的文件下載至本機。</p><p>
50、; 下圖為上傳子模塊流程圖。</p><p> 選擇文件在本機存儲位置</p><p><b> 將信息傳送至任務</b></p><p><b> 是</b></p><p> 重新獲取服務器文件列表</p><p><b> 否</b>
51、;</p><p><b> 圖5下載模塊流程圖</b></p><p> 4 FTP客戶端程序實現(xiàn)</p><p> 4.1.1數(shù)據(jù)輸入界面詳細設計</p><p> 該界面用來記錄用來輸入服務器的站點,用戶名和密碼信息,然后將信息發(fā)送到</p><p> 服務器進行驗證,利用Jtex
52、tfiled構件來實現(xiàn)??蛻舳艘还灿?個文本輸入框,分別為服務器地址輸入框url,用戶名輸入框username,密碼輸入框password 和端口號port。在程序運行時,用戶在輸入框url中輸入的FTP服務器站點、用戶在輸入框username中輸入的用戶名、用戶在輸入框password 中輸入密碼,用戶在端口號輸入框port中輸入端口號。利用getTEXT()函數(shù)獲取輸入框中的數(shù)據(jù),將url中的數(shù)據(jù)存儲至ip 中,將username中
53、的數(shù)據(jù)存儲至username中;如果用戶沒有在username中輸入數(shù)據(jù),則默認為用戶使用匿名方式登錄,將用戶名設置為designpattern,password中的數(shù)據(jù)則存儲至password,如 果 用 戶 沒 有 在password 中輸 入 數(shù) 據(jù) , 則 默 認 設 置 為</p><p> designpattern。</p><p> JTextField類的定義:<
54、;/p><p> JTextField url=new JTextField();服務器IP輸入框</p><p> JTextField username=new JTextField();用戶名輸入框</p><p> JTextField password=new JTextField();密碼輸入框</p><p> JTextF
55、ield port=new JTextField();端口號輸入框</p><p> 4.1.2服務器文件信息顯示界面詳細設計</p><p> 該界面的作用是是顯示服務器文件列表,利用Jscrollpane構件來實現(xiàn)。在客戶</p><p> 端主界面創(chuàng)建一個Jscrollpane,命名為ftpFileScrollPane1,并置于主界面中間,該表格包括三個
56、數(shù)據(jù)項:文件名file,文件大小filesizes,修改日期filedates,使用一個二維數(shù)組mydata來存儲這三個數(shù)據(jù)。當客戶端連接上服務器時,表格數(shù)據(jù)自動更新,主要功能使用setTableData()函數(shù)實現(xiàn)。當服務器連接時首先清除文件列表信息,利用removeAllElements()函數(shù)實現(xiàn),然后切換到當前目錄,使用ftpClient類中的cd命令實現(xiàn),再使用list命令前目錄下的數(shù)據(jù)、包括目錄和文件名。</p>
57、<p> JScrollPane類的定義:</p><p> JScrollPane ftpFileScrollPane1=newJScrollPane(ftpFileInfosTable);</p><p> 4.1.3上下載隊列顯示界面和信息顯示界面詳細設計</p><p> 這兩個模塊是信息顯示模塊,使用JScrollPane和JText
58、Area構件實現(xiàn)。其中taskScrollPan顯示上傳下載進程信息,consoleScrollPane顯示連進程開始 或 結束 信 息 , 將 信 息 顯示 的 文 本 域consoleTextArea放在 滾 動條 面 板consoleScrollPane中,并且設置為不可編輯。當客 戶 端 連 接 成 功 或 失 敗 ,上 傳 文 件 或 下 載 文 件 時 , 利 用 函 數(shù)taskScrollPane.append()和con
59、soleTextArea.append()在相應的區(qū)域顯示任務信息。</p><p> JScrollPane類的定義:</p><p> JScrollPanetaskScrollPane=newJScrollPane(taskList);</p><p> JScrollPaneconsoleScrollPane=newJScrollPane(consol
60、eTextArea);</p><p> 4.1.4操作按鈕模塊詳細設計</p><p> 操作按鈕使用JButton構件實現(xiàn),客戶端共有連接、上傳、下載、斷開、關閉、</p><p> 上一級目、錄刷、新重命名8個操作按鈕,分別命名為connectButton、closeButton、refreshButton 、deleteButton 、 downlo
61、adButton 、 uploadButton </p><p> renameButton 、upDirButton。</p><p> JButton類的定義:</p><p> private JButton connectButton=new JButton("連接");</p><p> priva
62、te JButton closeButton=new JButton("斷開連接");</p><p> private JButton refreshButton =new JButton("刷新");</p><p> private JButton deleteButton = new JButton("刪除");
63、 </p><p> private JButton downloadButton = new JButton("下載"); </p><p> private JButton uploadButton = new JButton("上傳"); </p><p> private JButton renameButt
64、on = new JButton("重命名");</p><p> private JButton upDirButton = new JButton("上級目錄");</p><p> 每個按鈕都有自己的響應事件來實現(xiàn)各自的功能,分別如下</p><p> 連接:connectButton.addActionList
65、ener( )...</p><p> 上傳:uploadButton.addActionListener(new ActionListener()...</p><p> 下載:downloadButton.addActionListener(new ActionListener()...</p><p> 刪除:deleteButton.addAction
66、Listener(new ActionListener()...</p><p> 斷開:closeButton.addActionListener(new ActionListener()...</p><p> 上一級目錄:upDirButton.addActionListener(new ActionListener()...</p><p> 刷新:r
67、efreshButton.addActionListener(new ActionListener()...</p><p> 重命名:renameButton.addActionListener(new ActionListener()...</p><p> 各按鈕在定義各自的響應后,用戶在點擊這些按鈕時,會做出相應的處理,啟動</p><p><b&
68、gt; 對應的進程。</b></p><p><b> 4.2功能模塊實現(xiàn)</b></p><p> 4.2.1連接服務器</p><p> 客戶端中FtpBean類中connect方法用來實現(xiàn)連接服務器功能,在Java中實現(xiàn)這一功能是借助FtpClient類完成的,首先是使用FtpClient類的openServer(st
69、ringserver)方法打開遠程FTP服務器,然后使用FtpClient類的login(user,password)方法登錄服務器。登錄遠程FTP服務器有兩種方式,一種是注冊用戶登錄,另一種是以匿名方式登錄。使用第一種方式登錄需要擁有該服務器的注冊用戶名和密碼,匿名方式則是以designpattern作為用戶名來登錄。類ftpClient提供了如下兩個可用于打開與FTP服務器之間的連接的方法</p><p>
70、 1.openServer(Stringhostname)用于建立一條與指定主機上的FTP服務器的連接,使用默認端口號:21</p><p> 2. connect(String dir, String hostname, int port, String username,String passwd) 用于建立一條與指定主機、指定端口上的FTP服務器的連接。本文所使用的是第一種方法進行連接,首先定義4個字符串
71、,命名為ip,username,port,</p><p> password,分別用來接收來自數(shù)據(jù)輸入界面的數(shù)據(jù)。然后將接收到的數(shù)據(jù)發(fā)送至服務器驗證,驗證成功則使用對話框函數(shù)在信息顯示界面中提示連接成功,失敗則顯示連接失敗。</p><p><b> 4.2.2上傳文件</b></p><p> 客戶端中實現(xiàn)上傳功能的文件為FtpBea
72、n類中的uploadFile函數(shù)來實現(xiàn)。當用戶選擇文件上傳時,客戶端會創(chuàng)建一個到FTP服務器的連接,同樣使用ftpClient類的openServer()方法和login()登錄到服務器,并切換到用戶選擇的目標目錄下,把傳輸格式設置為二 進 制 格 式 , 將 本 地 文 件 上 傳 至FTP 服 務 器 。 上 傳 結 束 后 利 用ftpClient.closeServer()函數(shù)斷開,并更新數(shù)據(jù)表格和清除任務線程。一般情況下FTP
73、服務器為了保證其安全性,權限中會設置是否允許用戶上傳文件。上傳失敗時,出錯處理會在對話框面板中顯示出文件上傳失敗。上傳的具體代碼見附錄。</p><p><b> 4.2.3下載文件</b></p><p> 客戶端下載文件由為FtpBean類中的downloadFile函數(shù)來實現(xiàn)。如果用戶想要下載列表中的某一個文件,首先判斷項目的類型是否是文件,如果是文件,則得
74、到下載的文件名并下載文件,如果選中的是目錄,則不能下載。用戶選擇好要下載的文件后,客戶端打開服務器連接端口,使用ftpClient類的openServer()方法和login()登錄到服務器,把傳輸格式設置為二進制格式,使用ftpClient.get()函數(shù)獲得文件名,下載并保存至用戶指定的路徑。下載完成后ftpClient.closeServer()關閉與服務器的連接并清除線程。當用戶下載失敗時,出錯處理會在信息顯示面板中顯示下載出錯
75、。下載的具體代碼見附錄。</p><p><b> 5 功能運行測試</b></p><p> 為了驗證程序是否能正常運行,我選擇連接IP為122.206.79.129的FTP服務器來測試。運行環(huán)境為windows7+eclipse。</p><p> 首先是服務器連接的驗證:</p><p> 在服務器地址中輸
76、入122.206.79.129,在用戶名中輸入designpattern,在密碼欄中輸入designpattern,點擊連接按鈕后,出現(xiàn)結果如下圖:</p><p> 結果顯示連接功能實現(xiàn),服務器文件信息列表中顯示了ip為122.206.79.129的FTP服務器下的文件夾列表,信息顯示中顯示了正確的連接信息。然后是下載文件功能的測試,選擇程序設計模式封頁.doc文件,點擊下載選擇保存至D盤,如圖:</p
77、><p> 繼續(xù)點擊保存按鈕,下載任務中成功添加下載任務,文件下載完后,如圖:</p><p> 最后是上傳功能測試。先在本機上創(chuàng)建一個名叫“程序設計模式封頁.doc”的文件,選擇上傳至跟目錄下,點擊上傳,顯示如圖:</p><p> 為了驗證是否真的上傳至FTP服務器,我用網(wǎng)上鄰居訪問了IP為122.206.79.129的FTP服務器,結果如圖:</p&g
78、t;<p> 文件確實上傳成功。至此,功能驗證已經(jīng)完畢!</p><p><b> 6 .結語</b></p><p> FTP的目標是提高文件的共享性和可靠高效地傳送數(shù)據(jù),而FTP客戶端的作用是使用戶方便的連接和訪問FTP服務器。本文實現(xiàn)了一個簡單易用的FTP客戶端,在分析FTP協(xié)議的基本工作原理和FTP的數(shù)據(jù)傳輸原理的基礎上,詳細介紹了如何使用
79、Java工具對FTP客戶端進行設計,選擇Java類庫來實現(xiàn)FTP客戶端程序的上傳下載等主要功能,并用eclipse軟件提供的一個支持可視化編程的開發(fā)環(huán)境,從而實現(xiàn)了對FTP客戶端的開發(fā)。雖然現(xiàn)在有很多實現(xiàn)FTP客戶端程序的技術和方法,諸如Winsock控件和Delphi的Indy組件等,但是使用Java在程序實現(xiàn)上顯得更加簡捷靈活,并具有較好的可擴充性和可移植性,在本文中使用的方法也是比較便捷和高效的。</p><p
80、><b> 參考文獻</b></p><p> [1]楊錫林、張燕等.Java編程高手.北京大學出版社,2000年12月第一版</p><p> (1):169~173.</p><p> [2]葉新銘等譯.計算機網(wǎng)絡(原書第二版).機械工業(yè)出版社,2001年6月 :</p><p> 端到端協(xié)議242-
81、283.</p><p> [3]夏先波等.JAVA+JDK實例開發(fā)寶典.電子工業(yè)出版社,2001年第一版:第13</p><p> 章.網(wǎng)絡編程281~289.</p><p> [4] J. Reynolds. RequestforComments:959:FileTransferProtocol,October1985 ,</p><
82、p> :THEFTPMODEL7~8.</p><p> [5]葉俊民.軟件工程.清華大學出版社,2006年6月第一版:第3章.軟件需求</p><p> 分析基礎51~73.</p><p> [6]Horstmann,C.S,Cornell,G.Java2核心技術.機械工業(yè)出版社,2006年3</p><p> 月第一版:
83、第6章.高級Swing279~385</p><p> [7] 楊淑萍 基于Java的FTP客戶端程序的設計與實現(xiàn) .現(xiàn)代計算機.</p><p> [8] 謝希仁 計算機網(wǎng)絡(第五版) 電子工業(yè)出版社</p><p><b> 附錄:</b></p><p> 程序源碼 ,主要核心代碼:</p&
84、gt;<p> FTPFrame.java</p><p> public void connect()//連接FTP服務器</p><p><b> {</b></p><p> String s=ftp.connect("/", url.getText().toString(), Integer.p
85、arseInt(port.getText()), username.getText().toString(), password.getText().toString());</p><p> status.setText(s);</p><p><b> update();</b></p><p> if(s.equals("
86、;Success"))</p><p><b> {</b></p><p> time = new Date();</p><p> out.println(time+" 登陸服務器:"+url.getText());</p><p> connectButton.setEnabl
87、ed(false);</p><p> closeButton.setEnabled(true);</p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> JOp
88、tionPane.showMessageDialog(null, s);</p><p> connectButton.setEnabled(true);</p><p> closeButton.setEnabled(false);</p><p><b> }</b></p><p><b> }&
89、lt;/b></p><p> public void uploadFile()//上傳文件</p><p><b> {</b></p><p> JFileChooser fDialog=new JFileChooser(); //文件選擇器</p><p> int result=fDialo
90、g.showOpenDialog(null);</p><p> if(result==JFileChooser.APPROVE_OPTION)</p><p><b> {</b></p><p> String file=fDialog.getSelectedFile().toString();</p><p>
91、; String targetFile=new String();</p><p> StringTokenizer st=new StringTokenizer(file,"\\");//拆分文件名</p><p> while(st.hasMoreTokens())</p><p><b> {</b><
92、/p><p> targetFile=st.nextToken();</p><p><b> }</b></p><p> boolean b=ftp.uploadFile(file,targetFile);</p><p> if(b==true)</p><p><b> {
93、</b></p><p><b> update();</b></p><p> status.setText("上傳文件"+targetFile+"成功");</p><p> JOptionPane.showMessageDialog(null, "上傳文件"+t
94、argetFile+"成功");</p><p> time = new Date();</p><p> out.println(time+" 上傳文件:"+targetFile+"成功");</p><p><b> }</b></p><p><
95、;b> else</b></p><p><b> {</b></p><p> status.setText("上傳文件"+targetFile+"失敗");</p><p> JOptionPane.showMessageDialog(null, "上傳文件&quo
96、t;+targetFile+"失敗");</p><p> out.println(time+" 上傳文件:"+targetFile+"失敗");</p><p><b> }</b></p><p><b> } </b></p><p
97、><b> }</b></p><p> public void downloadFile()//下載文件</p><p><b> {</b></p><p> if(!fileList.isSelectionEmpty())</p><p><b> {</b&
98、gt;</p><p> String targetFile=fileList.getSelectedValue().toString();//獲取所選擇的文件</p><p> JFileChooser fDialog=new JFileChooser(); //文件選擇器</p><p> int result=fDialog.showOpen
99、Dialog(null);</p><p> if(result==JFileChooser.APPROVE_OPTION)</p><p><b> {</b></p><p> ftp.downloadFile(targetFile, fDialog.getSelectedFile().toString());</p>
100、<p><b> update();</b></p><p> status.setText("下載文件"+targetFile+"成功");</p><p> JOptionPane.showMessageDialog(null, "下載文件"+targetFile+"成功&quo
101、t;);</p><p> time = new Date();</p><p> out.println(time+" 下載文件:"+targetFile);</p><p><b> }</b></p><p><b> }</b></p><p&
102、gt;<b> else</b></p><p><b> {</b></p><p> JOptionPane.showMessageDialog(null, "請選擇所要下載的文件");</p><p><b> }</b></p><p>&l
103、t;b> }</b></p><p> public void close(){//關閉連接</p><p> String s=ftp.close();</p><p> status.setText(s);</p><p> m.removeAllElements();</p><p>
104、 time = new Date();</p><p> out.println(time+" 離開服務器:"+url.getText());</p><p> out.close();</p><p> connectButton.setEnabled(true);</p><p> closeButton.s
105、etEnabled(false);</p><p><b> }</b></p><p> FtpBean.java</p><p><b> //打開連接</b></p><p> public String connect(String dir, String hostname, int
106、 port, String username,String passwd) </p><p><b> {</b></p><p> String msg = "";</p><p><b> try</b></p><p><b> {</b>&l
107、t;/p><p> ftpClient = new FtpClient(hostname, port);</p><p> ftpClient.login(username, passwd);</p><p> ftpClient.binary();</p><p> msg = "Success";</p>
108、;<p><b> } </b></p><p> catch (FtpLoginException e)</p><p><b> {</b></p><p> msg = "登錄主機失敗,可能是用戶名密碼錯誤!";</p><p> ftpClient
109、=null;</p><p><b> } </b></p><p> catch (IOException e) </p><p><b> {</b></p><p> msg = "登錄主機失敗,請檢驗端品是否正確!";</p><p>
110、ftpClient=null;</p><p><b> } </b></p><p> catch (SecurityException e) </p><p><b> {</b></p><p> msg = "無權連接主機,主確認是否有權限連接主機!";</
111、p><p> ftpClient=null;</p><p><b> }</b></p><p> return msg;</p><p><b> }</b></p><p><b> //上傳文件</b></p><p&g
112、t; public boolean uploadFile(String localFile, String targetFileName)</p><p><b> {</b></p><p> boolean result = false;</p><p> if (this.ftpClient == null) </p>
113、<p><b> {</b></p><p> return false;</p><p><b> }</b></p><p> TelnetOutputStream tos = null;</p><p> RandomAccessFile sendFile = null
114、;</p><p> DataOutputStream dos = null;</p><p><b> try </b></p><p><b> {</b></p><p> File file = new File(localFile);</p><p> s
115、endFile = new RandomAccessFile(file, "r");</p><p> sendFile.seek(0);</p><p> tos = this.ftpClient.put(targetFileName);</p><p> dos = new DataOutputStream(tos);</p>
116、;<p> int ch = 0;</p><p> while (sendFile.getFilePointer() < sendFile.length()) </p><p><b> {</b></p><p> ch = sendFile.read();</p><p> dos.w
117、rite(ch);</p><p><b> }</b></p><p> result = true;</p><p><b> } </b></p><p> catch (Exception ex) </p><p><b> {</b>
118、</p><p> result = false;</p><p><b> } </b></p><p><b> finally </b></p><p><b> {</b></p><p> if (tos != null) </
119、p><p><b> {</b></p><p><b> try </b></p><p><b> {</b></p><p> tos.close();</p><p><b> } </b></p>&l
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 計算機網(wǎng)絡課程設計報告(ftp客戶端的設計與實現(xiàn))
- 數(shù)控技術課程設計--數(shù)控編程技術
- 網(wǎng)絡編程技術課程研究
- web課程設計 《web網(wǎng)絡編程技術》課程設計報告
- 畢設論文-ftp客戶端的實現(xiàn)
- 嵌入式ftp客戶端的設計與實現(xiàn)
- 網(wǎng)絡服務器ftp客戶端的設計與實現(xiàn)---畢業(yè)論文
- 畢業(yè)設計--簡單ftp客戶端的實現(xiàn)
- 網(wǎng)絡服務器ftp客戶端的設計與實現(xiàn)---畢業(yè)論文
- 可視化編程技術課程設計(論文)-學生學籍管理系統(tǒng)
- 嵌入式FTP客戶端的設計與實現(xiàn).doc
- ftp協(xié)議的研究與客戶端實現(xiàn)
- java-web編程技術課程設計--項目管理系統(tǒng)
- 畢業(yè)設計--簡單Ftp客戶端的實現(xiàn).doc
- FTP客戶端及服務器系統(tǒng)的設計與實現(xiàn).pdf
- mba論文面向無線傳感器網(wǎng)絡匯聚節(jié)點的ftp客戶端的設計與實現(xiàn)pdf
- 可視化編程技術課程設計-(高速公路收費系統(tǒng))
- 個人網(wǎng)店及手機客戶端設計與開發(fā)課程設計
- 面向無線傳感器網(wǎng)絡匯聚節(jié)點的FTP客戶端的設計與實現(xiàn).pdf
- 網(wǎng)絡監(jiān)控客戶端系統(tǒng)的設計與實現(xiàn).pdf
評論
0/150
提交評論