文件傳送協(xié)議(FTP — File Transfer Protocol)是TCP/IP提供的標準機制,用來從一臺主機將文件復(fù)制到另一臺主機。從一臺計算機向另一臺計算機傳送文件是在聯(lián)網(wǎng)或互聯(lián)網(wǎng)環(huán)境中常見的任務(wù)。
英創(chuàng)ARM9系列工控主板預(yù)裝正版WinCE5.0操作系統(tǒng),WinCE內(nèi)核提供了FTP Server應(yīng)用程序,這為通過FTP實現(xiàn)文件傳送提供了方便,在本公司網(wǎng)站文章《ARM9工控主板WinCE應(yīng)用程序的遠程FTP自動更新》中介紹的方案,就是利用WinCE內(nèi)核提供的FTP Server實現(xiàn)的應(yīng)用程序遠程更新。但在很多應(yīng)用場合,是工控主板作為本地FTP客戶端與遠端FTP服務(wù)器交換文件,為此需要程序員自己編寫在ARM9主板上運行的FTP客戶端的程序。對于WinCE操作系統(tǒng),Microsoft提供了如FtpGetFile()、FtpPutFile()等用于文件傳送的函數(shù),程序員利用這些函數(shù),可以方便的編寫出FTP客戶端程序。但如果網(wǎng)絡(luò)環(huán)境復(fù)雜或采用GPRS網(wǎng)絡(luò),由于GPRS網(wǎng)絡(luò)原因,網(wǎng)絡(luò)連接很容易中斷,如果每次連接中斷,整個文件都重新傳送,一個稍大的文件基本上不能成功傳送,此時就要求FTP文件傳送具有斷點續(xù)傳功能。
斷點續(xù)傳是指在文件的傳送過程中,因為網(wǎng)絡(luò)或其它原因至使傳送過程中斷,當(dāng)再次傳送這個文件時,將從已傳送的部份開始,繼續(xù)未完成部份傳送,不用從頭對整個文件進行傳送,這樣可以節(jié)省時間,節(jié)約網(wǎng)絡(luò)流量,提高文件傳送速度。對于在GPRS網(wǎng)絡(luò)上應(yīng)用的FTP,斷點續(xù)傳功能顯得尤為重要,但Microsoft提供的FTP API中,卻沒有支持斷點續(xù)傳的函數(shù),為此,英創(chuàng)公司針對斷點續(xù)傳這一要求,直接采用SOCKET API,封裝了一個支持斷點續(xù)傳的FTP客戶端靜態(tài)庫EM_FTPClient.LIB,下面對這個庫函的API函數(shù)做詳細說明。
支持斷點續(xù)傳的FTP庫函數(shù)說明:
(1)bool Logon( LPCTSTR lpszHostIP, LPCTSTR lpszUserName=_T(‘’), LPCTSTR lpszPassword=_T(‘’), int nTimeOut=5000 );
功能描述:登錄到FTP服務(wù)器
輸入?yún)?shù) lpszHostIP:服務(wù)器IP
lpszUserName:用戶名
lpszPassword:用戶密碼(當(dāng)用戶名用與用戶密碼為空時,將匿名登錄)
nTimeOut:超時設(shè)置 1000(mS)《=nTimeOut《=60000(mS)
返回值 = TRUE:登錄FTP服務(wù)器成功
FALSE:登錄FTP服務(wù)器失敗
(2)bool ChangeDir( LPCTSTR lpszRemoteDir=_T(‘\\’) );
功能描述:設(shè)置遠端FTP服務(wù)器當(dāng)前目錄
輸入?yún)?shù) lpszRemoteDir:服務(wù)器目錄
返回值 = TRUE:目錄更改成功
FALSE:目錄更改失敗
(3)bool ListAll( FILELIST* fileList );
功能描述:獲取FTP服務(wù)器當(dāng)前目錄下的所有文件的列表
輸入?yún)?shù) fileList:接收文件列表的結(jié)構(gòu)體
返回值 = TRUE:獲取文件列表成功
= FALSE:獲致文件列表失敗
文件列表數(shù)據(jù)結(jié)構(gòu)定義如下:
typedef struct
{
int nFileNum; //當(dāng)前目錄文件個數(shù)
TCHAR FileList[MAXFILENUM][MAX_PATH]; //文件名列表
//(注:當(dāng)nFileNum = 0 時,此數(shù)組中的內(nèi)容無效)
}FILELIST;
(4)bool GetFile( LPCTSTR lpszLocalFile, LPCTSTR lpszRemoteFile, int nMode = 0, bool bResume=FALSE );
功能描述:從FTP服務(wù)器上下載指定文件(如果下載的文件已存在于本地當(dāng)前目錄下,將覆蓋下載)
輸入?yún)?shù) lpszLocalFile:存儲為本地文件名
lpszRemoteFile:下載的指定文件
nMode:傳輸模式 =0: 二進制模式 =1: 文本模式
bResume:斷點續(xù)傳標志
=TRUE:繼點續(xù)傳
(程序?qū)鞌郌TP連接,重新執(zhí)行Logon(),ChangeDir(),然后下載)
=FALSE: 正常下載
返回值 = TRUE:開始下載
FALSE:開始下載失敗
(5)bool DelFile( LPCTSTR lpszFileName)
功能描述:刪除遠端FTP服務(wù)器當(dāng)前目錄下指定文件
輸入?yún)?shù) lpszFileName:指定要刪除的文件
返回值 = TRUE:刪除成功
FALSE:刪除失敗
(6)bool Logoff( );
功能描述:注銷與遠端FTP服務(wù)器的連接
(7)void Abort( );
功能描述:中斷與遠端FTP服務(wù)器的連接
(8)FTPSTATUS* GetStatus( );
功能描述:獲取當(dāng)前文件的下載狀態(tài)
返回值: 指向當(dāng)前下載文件狀態(tài)數(shù)據(jù)結(jié)構(gòu)的指針
文件下載狀態(tài)數(shù)據(jù)結(jié)構(gòu)定義如下:
typedef struct
{
int nSucceed; //上傳/下載是否成功
//=0:文件正在傳輸,=1文件傳輸成功,=-1文件傳輸失敗
int nErrCnt; //重傳次數(shù)
int nMode; //上傳=1,下載=2
int nStatus; // FTP狀態(tài)
DWORD dwFileSize; //文件字節(jié)數(shù)
DWORD dwCompleteSize; // 已完成字節(jié)數(shù)
}FTPSTATUS;
(9)int GetErrorCode( );
功能描述:獲取最后一次錯誤的錯誤碼
返回值:錯誤碼(錯誤碼的定義請參看EM_FTPClient.H)
補充說明:
1、在調(diào)用GetFile()函數(shù)時,如果將bResum設(shè)置為TRUE,程序?qū)⒆詣訄?zhí)行以下步驟:
↓調(diào)用Abort( )中斷與FTP服務(wù)器的連接
↓調(diào)用Logon( )登錄到FTP服務(wù)器
↓調(diào)用ChangeDir( )設(shè)置FTP服務(wù)器當(dāng)前目錄
↓從已完成傳送的部份繼續(xù)下載
其中Logon()和ChangeDir( )的參數(shù)是最后一次調(diào)用Logon()和ChangeDir( )傳入的值。
2、調(diào)用GetFile()函數(shù)返回為TRUE時,并不是表示文件下載成功,只表明文件開始下載。主程序應(yīng)該通過判斷FTPSTATUS數(shù)據(jù)結(jié)構(gòu)中的nSucceed值來確認下載是否成功。
3、現(xiàn)在的FTP服務(wù)器普遍支持PASV模式,因此本FTP Client僅支持PASV模式數(shù)據(jù)傳送。
4、英創(chuàng)公司提供相應(yīng)的測試例程,感興趣的客戶可向英創(chuàng)索要相關(guān)代碼。
-
嵌入式主板
+關(guān)注
關(guān)注
7文章
6100瀏覽量
36296
發(fā)布評論請先 登錄
ARM9工控主板支持斷點續(xù)傳的FTP文件傳送
英創(chuàng)的ARM9工控主板應(yīng)用程序自動加載實現(xiàn)
英創(chuàng)信息技術(shù)VS2005調(diào)試ARM9核心板簡介

英創(chuàng)信息技術(shù)ARM9工控主板WinCE應(yīng)用程序遠程控制應(yīng)用
英創(chuàng)信息技術(shù)ARM9工控主板內(nèi)嵌AD概述

英創(chuàng)信息技術(shù)ARM9工控板在遠程監(jiān)控領(lǐng)域的應(yīng)用

英創(chuàng)信息技術(shù)ARM9工控板串口設(shè)備的COM組件應(yīng)用
英創(chuàng)信息技術(shù)ARM9工控主板遠程操作自動更新介紹
英創(chuàng)信息技術(shù)ARM9工控板遠程抓拍圖像應(yīng)用介紹

英創(chuàng)信息技術(shù)工控主板EM9360的GPIO介紹
英創(chuàng)信息技術(shù)工控主板的復(fù)位管理介紹

英創(chuàng)信息技術(shù)工控主板內(nèi)核更新與版本管理介紹

英創(chuàng)信息技術(shù)EM9000工控主板的版本信息管理概述

英創(chuàng)信息技術(shù)ARM9工控主板擴展矩陣鍵盤的方法

評論