ftp客戶端實現要建立兩個通道,乙個控制命令通道,讓ftp伺服器知道客戶端要幹什麼,乙個資料傳輸通道。所謂的兩個通道只不過是兩個呼叫了connect函式的連線,只是控制命令通道專門用來傳輸一些字串命令資訊,而資料通道則是用來傳輸檔案。控制命令通道一定是由客戶端向伺服器的連線(預設的埠是21,也可以指定埠,這要看伺服器的設定)。連線的過程完成了ftp的登入。資料通道則不一定啦,具體哪個連哪個,請看下面對pasv命令的解釋。
客戶端的實現步驟如下:
3、客戶端定位本地檔案指標(檔案末尾);
4、兩端的準備工作都做完了以後,客戶端建立socket,以被動或非被動方式建立資料通道,迴圈呼叫recv接收資料並追加入本地檔案;
二、上傳:
1、獲取伺服器上和本地要上傳檔案的同名檔案大小;
3、定位本地檔案指標(和ftp上檔案大小相同的位置)
4、從檔案指標處讀資料並傳送。
這裡重點說說pasv模式,即被動模式,這是ftp命令裡比較不容易理解的乙個,這條命令請求伺服器在某個埠(非ftp預設埠或控制命令埠)建立乙個監聽socket,伺服器建立的埠號會在客戶端的控制命令通道上得到響應。得到這個埠號後,客戶端就可以建立新的socket(資料通道)connect過去,並進行檔案傳輸等工作。否則,如果為非被動模式,那麼監聽的socket由客戶端建立,伺服器connect過來。
對於這條命令的存在我是這麼理解的,存在這麼一種情況:客戶端的ip是個內網的ip,伺服器的ip是個外網的,當進行資料傳輸時內網的ip對於伺服器是不可見的,只有由伺服器啟動監聽socket才能建立資料通道,所以必須以被動模式進行。:)
FTP實現斷點續傳
ftp客戶端實現要建立兩個通道 乙個控制命令通道,讓ftp伺服器知道客戶端要幹什麼,乙個是資料傳輸通道。所謂的兩個通道只不過是兩個呼叫了connect函式的連線,只是控制命令通道專門用來傳輸一些字串命令資訊,而資料通道則是用來傳輸檔案。控制命令通道一定是由客戶端向伺服器的連線 預設的埠是21,也可以...
ftp斷點續傳
import open.mis.data.downloadstatus import open.mis.data.uploadstatus import org.apache.commons.net.printcommandlistener import org.apache.commons.net...
C 實現FTP斷點續傳
一 前言 在internet網際網路應用程式支援上,microsoft提供了win32 internet api函式支援,此型別的api是由wininet.dll動態鏈結函式庫所提供的。win32 internet api 即 wininet 幫助實現對 gopher ftp 和 http 等常用 ...