亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? 用java實現ftp服務器 .txt

?? windows下的編程 一共有7篇!
?? TXT
字號:
用Java實現FTP服務器 
加入時間 2004-3-1 12:01:06 本站域名 www.code365.com


FTP(File Transfer Protocol 文件傳輸協議)是Internet 上用來傳送文件的協議。在Internet上通過FTP 服務器可以進行文件的上傳(Upload)或下載(Download)。FTP是實時聯機服務,在使用它之前必須是具有該服務的一個用戶(用戶名和口令),工作時客戶端必須先登錄到作為服務器一方的計算機上,用戶登錄后可以進行文件搜索和文件傳送等有關操作,如改變當前工作目錄、列文件目錄、設置傳輸參數及傳送文件等。使用FTP可以傳送所有類型的文件,如文本文件、二進制可執行文件、圖象文件、聲音文件和數據壓縮文件等。 

  FTP 命令 

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

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

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

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

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

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

  編程思路 

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

  編程技巧說明 

  1.主函數設計 

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

  具體的代碼如下: 

public class ftpServer extends Thread{
private Socket socketClient;
private int counter;
private static String initDir;
public static void main(String[] args){
if(args.length != 0) {
initDir = args[0];
}else{ initDir = "c:";}
int i = 1;
try{
System.out.println("ftp server started!");
//監聽21號端口
ServerSocket s = new ServerSocket(21);
for(;;){
//接受客戶端請求
Socket incoming = s.accept();
//創建服務線程
new ftpServer(incoming,i).start();
i++;
}
}catch(Exception e){}
} 
2. 線程類的設計 

  線程類的主要設計都是在run()方法中實現。用run()方法得到客戶端的套接字信息,根據套接字得到輸入流和輸出流,向客戶端發送歡迎信息。 

  3. FTP 命令的處理 

  (1) 訪問控制命令 

  ◆ user name(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."); 

  User 命令和 Password 命令分別用來提交客戶端用戶輸入的用戶名和口令。 

  ◆ CWD (CHANGE WORKING DIRECTORY) 命令處理代碼如下: 

if(str.startsWith("CWD")){
String str1 = str.substring(3);
dir = dir+"/"+str1.trim();
out.println("250 CWD command succesful");
} 

  該命令改變工作目錄到用戶指定的目錄。 

  ◆ CDUP (CHANGE TO PARENT DIRECTORY) 命令處理代碼如下: 

if(str.startsWith("CDUP")){
int n = dir.lastIndexOf("/");
dir = dir.substring(0,n);
out.println("250 CWD command succesful");
} 

  該命令改變當前目錄為上一層目錄。 

  ◆ QUIT命令處理代碼如下: 

if(str.startsWith("QUIT")) {
out.println("GOOD BYE");
done = true; 
} 

  該命令退出及關閉與服務器的連接,輸出GOOD BYE。 

  (2) 傳輸參數命令 

  ◆ 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;l str1 = 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);
} 

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

  ◆ TYPE命令處理代碼如下: 

if(str.startsWith("TYPE")){
out.println("200 type set");
}


  TYPE 命令用來完成類型設置。 

  (3) FTP 服務命令 

  ◆ RETR (RETEIEVE) 和 STORE (STORE)命令處理的代碼 

if(str.startsWith("RETR")){
out.println("150 Binary data connection");
str = str.substring(4);
str = str.trim();
RandomAccessFile outFile = new
RandomAccessFile(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){}
}
if(str.startsWith("STOR")){
out.println("150 Binary data connection");
str = str.substring(4);
str = str.trim();
RandomAccessFile inFile = new
RandomAccessFile(dir+"/"+str,"rw");
Socket tempSocket = new Socket(host,tempPort);
InputStream inSocket
= tempSocket.getInputStream();
byte byteBuffer[] = new byte[1024];
int amount;
try{
while((amount =inSocket.read(byteBuffer) )!= -1){
inFile.write(byteBuffer, 0, amount);
}
inSocket.close();
out.println("226 transfer complete");
inFile.close();
tempSocket.close();
}
catch(IOException e){}
} 

  文件傳輸命令包括從服務器中獲得文件RETR和向服務器中發送文件STOR,這兩個命令的處理非常類似。處理RETR命令時,首先得到用戶要獲得的文件的名稱,根據名稱創建一個文件輸入流,然后和客戶端建立臨時套接字連接,并得到一個輸出流。隨后,將文件輸入流中的數據讀出并借助于套接字輸出流發送到客戶端,傳輸完畢以后,關閉流和臨時套接字。 

  STOR 命令的處理也是同樣的過程,只是方向正好相反。 

  ◆ 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");
} 

  DELE 命令用于刪除服務器上的指定文件。 

  ◆ 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 if( dirStructure[i].indexOf(".") == -1) {
strType = "d ";}
else
{strType = "- ";}
out2.println(strType+dirStructure[i]);
}
tempSocket.close();
out.println("226 transfer complete");
}
catch(IOException e){} 

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

 
 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品成人私密视频| 欧美精品一区二区精品网| 在线观看亚洲成人| 国产成人夜色高潮福利影视| 久久国产精品99久久人人澡| 久久激情五月激情| 国产乱码字幕精品高清av | 亚洲人午夜精品天堂一二香蕉| 日韩精品资源二区在线| 日韩视频免费观看高清完整版| 91精品国产91久久久久久最新毛片| 欧美日韩国产乱码电影| 日韩视频免费观看高清在线视频| 精品日韩在线一区| 国产香蕉久久精品综合网| 国产精品麻豆欧美日韩ww| 亚洲免费在线视频一区 二区| 一区二区久久久| 日本亚洲一区二区| 国产精品亚洲一区二区三区妖精| 成人一区二区三区视频在线观看 | 亚洲观看高清完整版在线观看 | 久久精品国产亚洲高清剧情介绍| 欧美色老头old∨ideo| 欧美日韩亚州综合| 日韩精品一区二区三区中文不卡| 久久久99精品免费观看不卡| 最新高清无码专区| 人人超碰91尤物精品国产| 国产乱子伦视频一区二区三区| 成人免费视频app| 欧美三级日本三级少妇99| 日韩精品一区二区三区蜜臀| 亚洲欧洲日本在线| 免费在线视频一区| 91蝌蚪porny九色| 欧美大片日本大片免费观看| 亚洲欧洲av在线| 蜜芽一区二区三区| 91老师国产黑色丝袜在线| 6080亚洲精品一区二区| 亚洲欧洲在线观看av| 久久99九九99精品| 欧美午夜精品久久久| 国产欧美日韩视频一区二区| 日韩高清欧美激情| 91蝌蚪porny| 中文字幕免费不卡| 久久电影网电视剧免费观看| 欧美专区在线观看一区| 国产精品对白交换视频| 国内成人精品2018免费看| 欧美日韩国产精品成人| 亚洲欧美国产毛片在线| 国产福利一区二区三区视频| 日韩一二三四区| 亚洲午夜影视影院在线观看| 成人av资源在线| 久久无码av三级| 精品一区二区影视| 91麻豆精品国产91久久久资源速度| 国产精品成人一区二区艾草 | 国产精品天天看| 国产酒店精品激情| 欧美精品一区二区三区蜜臀| 奇米四色…亚洲| 色婷婷激情久久| 亚洲欧美日韩国产一区二区三区 | 国产一区二区视频在线| 在线不卡一区二区| 偷拍一区二区三区四区| 日韩女优av电影| 日韩精品视频网站| 欧美日韩1234| 日韩经典一区二区| 日韩一二三四区| 久久精品国产秦先生| 日韩视频免费观看高清完整版| 日本91福利区| 日韩久久精品一区| 国产精品1024| 国产精品视频第一区| 99天天综合性| 亚洲综合在线第一页| 欧美一区三区二区| 黄网站免费久久| 国产精品美女久久久久久久久久久 | 久久女同精品一区二区| 99免费精品在线| 欧美精品高清视频| 欧美精品一区二区不卡 | 激情小说欧美图片| 久久久不卡网国产精品二区| 国产a久久麻豆| 亚洲欧洲精品天堂一级| 欧美日韩亚洲综合| 美女视频黄免费的久久| 亚洲你懂的在线视频| 欧美日韩精品三区| 国产一二精品视频| 亚洲人成7777| 日韩精品一区二区三区四区视频| 国产成人高清视频| 亚洲电影在线播放| 久久久五月婷婷| 日本韩国欧美国产| 麻豆一区二区三区| 一区免费观看视频| 欧美一区二区久久| 99vv1com这只有精品| 欧美aaaaaa午夜精品| 国产精品国产三级国产有无不卡| 欧美日韩一区二区三区四区| 国产乱码精品一区二区三区忘忧草 | 国产一区二区三区观看| 国产精品久久久久久久午夜片 | 成人av一区二区三区| 日韩成人精品在线观看| 国产精品看片你懂得| 欧美日韩国产一二三| 9色porny自拍视频一区二区| 奇米色777欧美一区二区| 亚洲欧美在线视频观看| 欧美一区二区三区四区高清| 97久久超碰精品国产| 黄页视频在线91| 日本免费新一区视频| 亚洲伦在线观看| 国产亚洲午夜高清国产拍精品| 欧美日韩国产一二三| 91免费看`日韩一区二区| 国产一区福利在线| 天天操天天综合网| 亚洲欧美另类综合偷拍| 欧美国产综合色视频| 精品国产乱码久久久久久久| 欧美日韩免费观看一区三区| zzijzzij亚洲日本少妇熟睡| 狠狠色丁香婷婷综合久久片| 日韩电影在线一区二区三区| 一区二区三区在线影院| 中文字幕日韩精品一区| 久久尤物电影视频在线观看| 欧美一级日韩不卡播放免费| www国产成人| 欧美tickling网站挠脚心| 欧美影院一区二区| 在线观看日韩毛片| 色综合久久中文综合久久97| www.亚洲激情.com| 粉嫩av一区二区三区粉嫩| 国产成都精品91一区二区三 | 国产精品成人在线观看| 中文字幕乱码久久午夜不卡| 久久蜜臀精品av| 中国av一区二区三区| 国产精品久久久久久妇女6080| 国产精品色哟哟| 亚洲手机成人高清视频| 亚洲精品视频在线看| 亚洲一二三四在线观看| 五月激情综合网| 美国十次综合导航| 国产一区二区美女| a级精品国产片在线观看| 99久久精品国产麻豆演员表| 91丨porny丨国产入口| 欧洲一区二区三区在线| 欧美午夜精品理论片a级按摩| 欧美精品一卡二卡| 久久亚洲二区三区| 国产精品国模大尺度视频| 亚洲蜜臀av乱码久久精品蜜桃| 亚洲高清中文字幕| 激情六月婷婷久久| 91原创在线视频| 欧美一级理论片| 国产精品视频免费看| 亚洲18影院在线观看| 久久国内精品自在自线400部| 国产**成人网毛片九色| 欧美专区日韩专区| 久久久一区二区| 一区二区三区高清| 国产精品综合一区二区| 91福利在线导航| 久久欧美一区二区| 一区二区三国产精华液| 老司机一区二区| 91国偷自产一区二区三区成为亚洲经典 | 亚洲一区精品在线| 国产一区二区精品久久99| 色呦呦一区二区三区| 精品久久久久一区| 夜夜嗨av一区二区三区网页 | 午夜久久久久久| 成人午夜在线播放| 日韩一区二区三区高清免费看看| 中文字幕在线免费不卡| 九九精品一区二区|