999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于Java語言的FTP Client程序設計

2009-04-29 00:00:00逯昌浩
電腦知識與技術 2009年14期

摘要:FTP是常用的網絡功能,Java語言有很強的網絡編程功能。使用Java語言開發FTP客戶端程序很有實用價值。文章介紹了FTP協議的功能特點和FTP客戶端的常用命令,闡述了如何使用Java程序設計語言來實現FTP客戶端程序功能,并給出了關鍵命令的實現代碼。實踐證明,用Java語言編寫的FTP客戶端程序效果良好。

關鍵詞:FTP;Java;網絡;文件傳輸;線程

中圖分類號:TP311文獻標識碼:A文章編號:1009-3044(2009)14-3697-03

Design of FTP Client Program Based on Java

LU Chang-hao

(Shandong Vocational College of Industry, Zibo 256414, China)

Abstract: FTP is a useful function on the Internet. Java language is high-powered in network program. It is available to design FTP client program by using Java language. In this article, the main functions of FTP protocol and the important commands in FTP client are introduced; the implement of FTP client program is discussed; the pivotal codes are given. The effort is well proved in the practices.

Key words: FTP; Java; network; file transfer; thread

1 引言

FTP(File Transfer Protocol),是文件傳輸協議的簡稱,用于在Internet上控制文件的雙向傳輸。用戶在Internet上通過FTP服務器可以進行文件的上傳(Upload)或下載(Download),也可以通過它把自己的PC機與世界各地所有運行FTP協議的服務器相連,訪問服務器上的大量資源。Java語言支持Internet應用的開發,在基本的Java應用編程接口中有網絡應用編程接口(java.net),提供了用于網絡應用編程的類庫。Java語言支持多個線程的同時執行和多線程之間的同步機制,提供了安全機制以增強在網絡環境中的安全性。因此使用Java語言開發FTP client(客戶端)程序是一個合適的選擇。本文中就如何使用Java語言實現FTP客戶端程序進行了探討。

2 基于Java語言的FTP Client程序設計

2.1 FTP的特點

FTP是實時聯機服務,在使用它之前必須是具有該服務的一個用戶(用戶名和口令),工作時客戶端必須先登錄到作為服務器一方的計算機上,用戶登錄后可以進行文件搜索和文件傳送等有關操作,如改變當前工作目錄、列文件目錄、設置傳輸參數及傳送文件等。

FTP有兩種使用模式:主動和被動。主動模式要求客戶端和服務器端同時打開并且監聽一個端口以建立連接。在這種情況下,客戶端由于安裝了防火墻會產生一些問題。所以,創立了被動模式。被動模式只要求服務器端產生一個監聽相應端口的進程,這樣就可以繞過客戶端安裝了防火墻的問題。

FTP 的主要操作都是基于各種命令基礎之上的。常用的命令有:

1) 設置傳輸模式,它包括ASCⅡ(文本)和BINARY二進制模式。

2) 目錄操作,改變或顯示遠程計算機的當前目錄(cd、dir、ls命令)。

3) 連接操作,open命令用于建立同遠程計算機的連接;close命令用于關閉連接。

4) 發送操作,put命令用于傳送文件到遠程計算機;mput 命令用于傳送多個文件到遠程計算機。

5) 獲取操作,get命令用于接收一個文件;mget命令用于接收多個文件。

6) 退出操作,BYE命令。

2.2 編程思路

根據FTP的工作原理,在主函數中建立一個服務器套接字端口,等待客戶端請求,一旦客戶端請求被接受,服務器程序就建立一個服務器分線程,處理客戶端的命令。如果客戶端需要和服務器端進行文件的傳輸,則建立一個新的套接字連接來完成文件的操作。編程技巧說明如下:

2.2.1 主函數設計

在主函數中,完成服務器端口的偵聽和服務線程的創建。利用一個靜態字符串變量initDir 來保存服務器線程運行時所在的工作目錄。服務器的初始工作目錄是由程序運行時用戶輸入的,缺省為C盤的根目錄。關鍵代碼如下:

try

{ServerSocket s = new ServerSocket(21); //監聽21號端口

for(;;) {

Socket incoming = s.accept(); //接受客戶端請求

new ftpServer(incoming,i).start(); //創建服務線程

i++; }

}catch(Exception e)

{}

2.2.2 線程類的設計

在Java中,根據多線程應用程序繼承或實現對象的不同可以采用兩種方式:一種是應用程序的并發運行對象直接繼承Java的線程類Thread;另外一種方式是定義并發執行對象實現Runnable接口。不管使用哪種方法,線程類的主要設計都是在run()方法中實現。用run()方法得到客戶端的套接字信息,根據套接字得到輸入流和輸出流,向客戶端發送歡迎信息。

2.2.3 FTP命令的處理

1) FTP訪問控制命令:

User 命令和 Password 命令分別用來提交客戶端用戶輸入的用戶名和口令。相應的username(user) 和 password (pass) 命令處理代碼如下:

if(str.startsWith(\"USER\"))

{user = str.substring(4);

user = user.trim();

out.println(\"331 Password\");}

if(str.startsWith(\"PASS\"))

{out.println(\"230 User \"+user+\" logged in.\");}

此外,還有CWD命令用來改變工作目錄到用戶指定的目錄,CDUP命令改變當前目錄為上一層目錄和QUIT命令用于退出及關閉與服務器的連接,限于篇幅代碼從略。

2) 傳輸參數命令:

Port命令用于FTP服務器IP地址和端口號的傳輸。使用該命令時,客戶端必須發送客戶端用于接收數據的32位IP地址和16位的TCP端口號。這些信息以8位為一組,使用十進制傳輸,中間用逗號隔開。 Port命令處理代碼如下:

if(str.startsWith(\"PORT\"))

{out.println(\"200 PORT command successful\");

int i = str.length() - 1;

int j = str.lastIndexOf(\",\");

int k = str.lastIndexOf(\",\",j-1);

String str1,str2;str1=\"\";

str2=\"\";for(int l=k+1;

lstr1 = str2 + str.charAt(l);}

for(int l=j+1;l<=i;l++)

{str2 = str2 + str.charAt(l);}

tempPort = Integer.parseInt(str1) * 16 *16 +Integer.parseInt(str2);}

此外,還有用來完成類型設置的TYPE命令,限于篇幅代碼從略。

3) FTP 服務命令:

文件傳輸命令包括從服務器中獲得文件RETR和向服務器中發送文件STOR,這兩個命令的處理非常類似。處理RETR命令時,首先得到用戶要獲得的文件的名稱,根據名稱創建一個文件輸入流,然后和客戶端建立臨時套接字連接,并得到一個輸出流。隨后,將文件輸入流中的數據讀出并借助于套接字輸出流發送到客戶端,傳輸完畢以后,關閉流和臨時套接字。STOR 命令的處理也是同樣的過程,只是方向正好相反。 RETR (RETEIEVE) 命令處理的關鍵代碼如下(STORE命令類似,代碼從略):

if(str.startsWith(\"RETR\"))

{out.println(\"150 Binary data connection\");

str = str.substring(4);

str = str.trim();

RandomAccessFile outFile = newRandomAccessFile(dir+\"/\"+str,\"r\");

Socket tempSocket = new Socket(host,tempPort);

OutputStream outSocket= tempSocket.getOutputStream();

byte byteBuffer[]= new byte[1024];

int amount;

try

{while((amount = outFile.read(byteBuffer)) != -1)

{outSocket.write(byteBuffer, 0, amount);}

outSocket.close();

out.println(\"226 transfer complete\");

outFile.close();

tempSocket.close();}

catch(IOException e){}}

LIST 命令用于向客戶端返回服務器中工作目錄下的目錄結構,包括文件和目錄的列表。處理這個命令時,先創建一個臨時的套接字向客戶端發送目錄信息。這個套接字的目的端口號缺省為1,然后為當前工作目錄創建File 對象,利用該對象的list()方法得到一個包含該目錄下所有文件和子目錄名稱的字符串數組,然后根據名稱中是否含有文件名中特有的“.”來區別目錄和文件。最后,將得到的名稱數組通過臨時套接字發送到客戶端。LIST命令處理代碼如下:

if(str.startsWith(\"LIST\"))

{try

{out.println(\"150 ASCII data\");

Socket tempSocket = new Socket(host,tempPort);

PrintWriter out2= new PrintWriter(tempSocket.getOutputStream(),true);

File file = new File(dir);

String[] dirStructure = new String[10];

dirStructure= file.list();

String strType=\"\";

for(int i=0; i<10; i++)

{if( dirStructure[i].indexOf(\".\") == -1; )

{strType = \"d \";}

else

{strType = \"- \"; }

out2.println(strType+dirStructure[i]); }

tempSocket.close();

out.println(\"226 transfer complete\"); }

catch(IOException e){} }

DELE命令用于刪除服務器上的指定文件。則DELE (DELETE)命令處理代碼如下:

if(str.startsWith(\"DELE\"))

{str = str.substring(4);

str = str.trim();

File file = new File(dir,str);

boolean del = file.delete();

out.println(\"250 delete command successful\"); }

3 結論

上文中對如何使用Java語言實現FTP客戶端程序進行了探討,并給出了關鍵代碼實現。實踐證明,通過這種方法實現的FTP客戶端程序實用效果良好,能夠完成網絡上的文件傳輸與共享任務。

參考文獻:

[1] 萬江平,黃卓明,夏志忠,等.用Java開發的FTP服務器[J].華南理工大學學報:自然科學版, 2001(8):65-69.

[2] 楊洋,楊濤,武麗.基于Java的計算機輔助學習系統設計[J].微計算機信息,2006(21):156-15.

[3] 冀志剛,王祥.用JAVA語言實現FTP客戶端[J].唐山師范學院學報,2006(5):81-82.

[4] 劉沖,張海玥,張衛東,等.用Java JDK編寫FTP客戶程序[J].計算機應用,2001(S1):99-100.

[5] 楊淑萍.基于Java的FTP客戶端程序的設計與實現[J].現代計算機,2005(10):90-91.

[6] 周鳳艷,余華鴻.FTP研究及基于JAVA的客戶端實現[J].今日科苑,2008(14):198.

[7] 張景葳,萬江平,劉尚余.用Java開發FTP代理服務器[J].計算機應用研究,2001(5):104-107.

[8] 鄭佳武.基于JavaBean的多文件上載算法[J].臨沂師范學院學報,2004(6):109-113.

主站蜘蛛池模板: 精品少妇人妻av无码久久| 国产成人免费| 在线观看热码亚洲av每日更新| 亚洲中文精品久久久久久不卡| 亚洲欧美日本国产综合在线| 18禁色诱爆乳网站| 国产无码在线调教| 中国成人在线视频| 国产精品亚洲专区一区| 亚洲Av综合日韩精品久久久| 亚洲美女视频一区| 综合亚洲色图| 国产激情在线视频| 国产成人精品在线1区| 成人第一页| 国产精品污视频| 久久久精品无码一区二区三区| 亚洲国产日韩在线观看| 一边摸一边做爽的视频17国产 | 亚洲第一成年人网站| 精品久久国产综合精麻豆| 精品欧美一区二区三区久久久| 国产成在线观看免费视频| 91日本在线观看亚洲精品| 国产人前露出系列视频| 免费人成网站在线高清| 色综合久久88色综合天天提莫| 国产永久免费视频m3u8| 久久黄色免费电影| 亚洲激情99| 欧美成人aⅴ| 四虎国产永久在线观看| 国产亚洲欧美日韩在线一区二区三区 | 青青草91视频| 亚洲婷婷丁香| 欧美激情视频一区二区三区免费| 亚洲天堂免费| 波多野结衣在线一区二区| 免费又爽又刺激高潮网址| 奇米影视狠狠精品7777| 伊人AV天堂| 亚洲AV成人一区二区三区AV| 国产精品成人一区二区不卡| 亚洲成人动漫在线观看| 99国产精品免费观看视频| 最新国产网站| 麻豆精品在线播放| 经典三级久久| 先锋资源久久| 国产精品漂亮美女在线观看| 欧美性色综合网| 9久久伊人精品综合| 波多野结衣无码视频在线观看| 在线视频精品一区| 亚洲av片在线免费观看| 亚洲综合色区在线播放2019| 精品国产免费第一区二区三区日韩| 国产后式a一视频| 欧美国产日韩在线观看| 亚洲一区二区约美女探花| 国产99久久亚洲综合精品西瓜tv| 91精品人妻一区二区| 九九热免费在线视频| 大香伊人久久| 波多野结衣AV无码久久一区| 狼友视频一区二区三区| 久久香蕉国产线看观| 99久久精品国产自免费| 午夜性刺激在线观看免费| 国产一二视频| 亚洲IV视频免费在线光看| 91青青草视频| 国内丰满少妇猛烈精品播| 刘亦菲一区二区在线观看| 国产午夜不卡| 中文天堂在线视频| 欧美精品1区| 日韩欧美色综合| 亚洲美女一区| 99在线视频免费观看| 在线亚洲天堂| 日韩中文字幕亚洲无线码|