有時(shí)用戶通過FTP下傳文件需要?dú)v時(shí)數(shù)小時(shí),萬一線路中斷,不具備FTP斷點(diǎn)續(xù)傳的FTP服務(wù)器就只能從頭重傳;廈門中資源“虛擬主機(jī)”上的FTP服務(wù)器具有FTP斷點(diǎn)續(xù)傳能力,允許用戶從上傳斷線的地方繼續(xù)傳動,這樣大大減少了用戶的煩惱。
其實(shí)FTP斷點(diǎn)續(xù)傳的原理很簡單,可分為斷點(diǎn)下載和斷點(diǎn)上傳。
客戶端的實(shí)現(xiàn)步驟如下:
一、下載:
1、向服務(wù)器發(fā)送“REST + 本地文件長度”命令,告訴服務(wù)器,客戶端要斷點(diǎn)下載了。這時(shí)服務(wù)器還不知道客戶端要下載哪個(gè)文件;
要實(shí)現(xiàn)FTP的斷點(diǎn)續(xù)傳,F(xiàn)TP服務(wù)器必須支持REST指令,這條指令在FTP協(xié)議文本RFC959中就已經(jīng)定義了,不過它不是FTP服務(wù)器必須支持的指令。一般,你可以在下載前使用REST 100命令進(jìn)行實(shí)驗(yàn),如果服務(wù)器正常執(zhí)行了這條命令,說明該服務(wù)器支持FTP斷點(diǎn)續(xù)傳。REST后面跟的數(shù)表示下載文件的起始位置,而REST 0表示從文件最開始處下載。REST命令本身并不執(zhí)行下載功能,你仍需要使用RETR命令執(zhí)行下載工作。
2、向服務(wù)器發(fā)送“RETR + 文件名”命令,通知服務(wù)器要下載的文件名,這時(shí)服務(wù)器開始定位文件指針讀文件并發(fā)送數(shù)據(jù)。
3、客戶端定位本地文件指針(文件末尾);
4、兩端的準(zhǔn)備工作都做完了以后,客戶端創(chuàng)建socket,以被動或非被動方式建立數(shù)據(jù)通道,循環(huán)調(diào)用recv接收數(shù)據(jù)并追加入本地文件;
二、上傳:
1、獲取服務(wù)器上和本地要上傳文件的同名文件大小;
2、向服務(wù)器發(fā)送“APPE + 文件名”,通知服務(wù)器,接下來從數(shù)據(jù)通道發(fā)送給你的數(shù)據(jù)要附加到這個(gè)文件末尾。
3、定位本地文件指針(和FTP上文件大小相同的位置)
4、從文件指針處讀數(shù)據(jù)并發(fā)送。