Jbuilder9.0打造“完美”FTP
一、概述
大家知道,文件傳輸系統是由服務器端服務程序和客戶端應用程序兩部分組成。一個FTP服務器進程可同時處理多個客戶進程的請求服務。FTP服務器進程由兩大部分組成:一個主進程,負責接受新的請求;另外有若干個從進程,負責處理單一請求。象我們在windows 2000/2003 Server 中IIS所提供的FTP服務器程序就是服務器端服務程序的典型代表。我們這里所說設計的一個實現上傳和下載文件功能程序主要是指ftp客戶端應用程序。
FTP客戶端設計的原理,FTP使用兩條TCP連接來完成文件傳輸:控制連接與數據連接。控制連接用于傳輸控制,數據連接用于數據輸送。在服務器啟動后,服務器就會在端口21等待客戶的連接請求,有用戶需要傳輸文件時,客戶與服務器的端口21建立一個控制連接,用來傳送客戶的命令和服務器的應答,該連接一直保持到客戶與服務器通信結束為止。當客戶發出數據傳輸命令時,服務器會主動與客戶建立數據連接,并與其進行數據交換。
客戶端用戶并不直接處理控制連接上的FTP命令和FTP響應,而是由兩個協議解釋器進行處理。用戶接口為客戶端用戶提供一定形式的輸入界面,接收用戶的命令,將其轉換成標準的FTP命令,最終將控制連接上的FTP響應轉換成用戶可理解的方式。在客戶與服務器的整個連接期間,控制連接必須保持,而數據連接卻可以根據請求動態地建立和關閉。在最常用的流模式中,文件結束是用數據連接的關閉來表示的,換句話說,每傳輸一個文件或文件列表,系統就會再建立一個新的數據連接。
二、Jbuilder9中FTP庫簡介
在Jbuilder9使用的java語言中,提供了一類網絡類庫sun.net.ftp.FtpClient.,該類庫主要提供了用于建立FTP連接的類。利用這些類的方法,編程人員可以遠程登錄到FTP服務器,列舉該服務器上的目錄,設置傳輸協議,以及傳送文件。FtpClient類涵蓋了幾乎所有FTP的功能,FtpClient的實例變量保存了有關建立"代理"的各種信息。下面給出了這些實例變量。
public static boolean useFtpProxy
這個變量用于表明FTP傳輸過程中是否使用了一個代理,因此,它實際上是一個標記,此標記若為TRUE,表明使用了一個代理主機。
public static String ftpProxyHost
此變量只有在變量useFtpProxy為TRUE時才有效,用于保存代理主機名。
public static int ftpProxyPort
此變量只有在變量useFtpProxy為TRUE時才有效,用于保存代理主機的端口地址。
FtpClient有三種不同形式的構造函數,如下所示:
1、public FtpClient(String hostname,int port)
此構造函數利用給出的主機名和端口號建立一條FTP連接。
2、public FtpClient(String hostname)
此構造函數利用給出的主機名建立一條FTP連接,使用默認端口號。
3、FtpClient()
此構造函數將創建一FtpClient類,但不建立FTP連接。這時,FTP連接可以用openServer方法建立。
一旦建立了類FtpClient,就可以用這個類的方法來打開與FTP服務器的連接。類ftpClient提供了如下兩個可用于打開與FTP服務器之間的連接的方法。
public void openServer(String hostname)
這個方法用于建立一條與指定主機上的FTP服務器的連接,使用默認端口號。
public void openServer(String host,int port)
這個方法用于建立一條與指定主機、指定端口上的FTP服務器的連接。
打開連接之后,接下來的工作是注冊到FTP服務器。這時需要利用下面的方法。
public void login(String username,String password)
此方法利用參數username和password登錄到FTP服務器。使用過Intemet的用戶應該知道,匿名FTP服務器的登錄用戶名為anonymous,密碼一般用自己的電子郵件地址。
下面是FtpClient類所提供的一些控制命令。
public void cd(String remoteDirectory)
該命令用于把遠程系統上的目錄切換到參數remoteDirectory所指定的目錄。
public void cdUp():該命令用于把遠程系統上的目錄切換到上一級目錄。
public String pwd():該命令可顯示遠程系統上的目錄狀態。
public void binary():該命令可把傳輸格式設置為二進制格式。
public void ascii():該命令可把傳輸協議設置為ASCII碼格式。
public void rename(String string,String string1)
該命令可對遠程系統上的目錄或者文件進行重命名操作。
除了上述方法外,類FtpClient還提供了可用于傳遞并檢索目錄清單和文件的若干方法。這些方法返回的是可供讀或寫的輸入、輸出流。下面是其中一些主要的方法。
public TelnetInputStream list()
返回與遠程機器上當前目錄相對應的輸入流。
public TelnetInputStream get(String filename)
獲取遠程機器上的文件filename,借助TelnetInputStream把該文件傳送到本地。
public TelnetOutputStream put(String filename)
以寫方式打開一輸出流,通過這一輸出流把文件filename傳送到遠程計算機。
大家知道,文件傳輸系統是由服務器端服務程序和客戶端應用程序兩部分組成。一個FTP服務器進程可同時處理多個客戶進程的請求服務。FTP服務器進程由兩大部分組成:一個主進程,負責接受新的請求;另外有若干個從進程,負責處理單一請求。象我們在windows 2000/2003 Server 中IIS所提供的FTP服務器程序就是服務器端服務程序的典型代表。我們這里所說設計的一個實現上傳和下載文件功能程序主要是指ftp客戶端應用程序。
FTP客戶端設計的原理,FTP使用兩條TCP連接來完成文件傳輸:控制連接與數據連接。控制連接用于傳輸控制,數據連接用于數據輸送。在服務器啟動后,服務器就會在端口21等待客戶的連接請求,有用戶需要傳輸文件時,客戶與服務器的端口21建立一個控制連接,用來傳送客戶的命令和服務器的應答,該連接一直保持到客戶與服務器通信結束為止。當客戶發出數據傳輸命令時,服務器會主動與客戶建立數據連接,并與其進行數據交換。
客戶端用戶并不直接處理控制連接上的FTP命令和FTP響應,而是由兩個協議解釋器進行處理。用戶接口為客戶端用戶提供一定形式的輸入界面,接收用戶的命令,將其轉換成標準的FTP命令,最終將控制連接上的FTP響應轉換成用戶可理解的方式。在客戶與服務器的整個連接期間,控制連接必須保持,而數據連接卻可以根據請求動態地建立和關閉。在最常用的流模式中,文件結束是用數據連接的關閉來表示的,換句話說,每傳輸一個文件或文件列表,系統就會再建立一個新的數據連接。
二、Jbuilder9中FTP庫簡介
在Jbuilder9使用的java語言中,提供了一類網絡類庫sun.net.ftp.FtpClient.,該類庫主要提供了用于建立FTP連接的類。利用這些類的方法,編程人員可以遠程登錄到FTP服務器,列舉該服務器上的目錄,設置傳輸協議,以及傳送文件。FtpClient類涵蓋了幾乎所有FTP的功能,FtpClient的實例變量保存了有關建立"代理"的各種信息。下面給出了這些實例變量。
public static boolean useFtpProxy
這個變量用于表明FTP傳輸過程中是否使用了一個代理,因此,它實際上是一個標記,此標記若為TRUE,表明使用了一個代理主機。
public static String ftpProxyHost
此變量只有在變量useFtpProxy為TRUE時才有效,用于保存代理主機名。
public static int ftpProxyPort
此變量只有在變量useFtpProxy為TRUE時才有效,用于保存代理主機的端口地址。
FtpClient有三種不同形式的構造函數,如下所示:
1、public FtpClient(String hostname,int port)
此構造函數利用給出的主機名和端口號建立一條FTP連接。
2、public FtpClient(String hostname)
此構造函數利用給出的主機名建立一條FTP連接,使用默認端口號。
3、FtpClient()
此構造函數將創建一FtpClient類,但不建立FTP連接。這時,FTP連接可以用openServer方法建立。
一旦建立了類FtpClient,就可以用這個類的方法來打開與FTP服務器的連接。類ftpClient提供了如下兩個可用于打開與FTP服務器之間的連接的方法。
public void openServer(String hostname)
這個方法用于建立一條與指定主機上的FTP服務器的連接,使用默認端口號。
public void openServer(String host,int port)
這個方法用于建立一條與指定主機、指定端口上的FTP服務器的連接。
打開連接之后,接下來的工作是注冊到FTP服務器。這時需要利用下面的方法。
public void login(String username,String password)
此方法利用參數username和password登錄到FTP服務器。使用過Intemet的用戶應該知道,匿名FTP服務器的登錄用戶名為anonymous,密碼一般用自己的電子郵件地址。
下面是FtpClient類所提供的一些控制命令。
public void cd(String remoteDirectory)
該命令用于把遠程系統上的目錄切換到參數remoteDirectory所指定的目錄。
public void cdUp():該命令用于把遠程系統上的目錄切換到上一級目錄。
public String pwd():該命令可顯示遠程系統上的目錄狀態。
public void binary():該命令可把傳輸格式設置為二進制格式。
public void ascii():該命令可把傳輸協議設置為ASCII碼格式。
public void rename(String string,String string1)
該命令可對遠程系統上的目錄或者文件進行重命名操作。
除了上述方法外,類FtpClient還提供了可用于傳遞并檢索目錄清單和文件的若干方法。這些方法返回的是可供讀或寫的輸入、輸出流。下面是其中一些主要的方法。
public TelnetInputStream list()
返回與遠程機器上當前目錄相對應的輸入流。
public TelnetInputStream get(String filename)
獲取遠程機器上的文件filename,借助TelnetInputStream把該文件傳送到本地。
public TelnetOutputStream put(String filename)
以寫方式打開一輸出流,通過這一輸出流把文件filename傳送到遠程計算機。