原创 ARM9工控主板支持断点续传的FTP文件传送

2009-9-23 13:06 1437 2 2 分类: MCU/ 嵌入式

文章来源:http://www.emtronix.com/article/article2009313.html


      文件传送协议(FTP — File Transfer Protocol)是TCP/IP提供的标准机制,用来从一台主机将文件复制到另一台主机。从一台计算机向另一台计算机传送文件是在联网或互联网环境中常见的任务。

      英创ARM9系列工控主板预装正版WinCE5.0操作系统,WinCE内核提供了FTP Server应用程序,这为通过FTP实现文件传送提供了方便,在本公司网站文章
《ARM9工控主板WinCE应用程序的远程FTP自动更新》中介绍的方案,就是利用WinCE内核提供的FTP Server实现的应用程序远程更新。但在很多应用场合,是工控主板作为本地FTP客户端与远端FTP服务器交换文件,为此需要程序员自己编写在ARM9主板上运行的FTP客户端的程序。对于WinCE操作系统,Microsoft提供了如FtpGetFile()、FtpPutFile()等用于文件传送的函数,程序员利用这些函数,可以方便的编写出FTP客户端程序。但如果网络环境复杂或采用GPRS网络,由于GPRS网络原因,网络连接很容易中断,如果每次连接中断,整个文件都重新传送,一个稍大的文件基本上不能成功传送,此时就要求FTP文件传送具有断点续传功能。

      断点续传是指在文件的传送过程中,因为网络或其它原因至使传送过程中断,当再次传送这个文件时,将从已传送的部份开始,继续未完成部份传送,不用从头对整个文件进行传送,这样可以节省时间,节约网络流量,提高文件传送速度。对于在GPRS网络上应用的FTP,断点续传功能显得尤为重要,但Microsoft提供的FTP API中,却没有支持断点续传的函数,为此,英创公司针对断点续传这一要求,直接采用SOCKET API,封装了一个支持断点续传的FTP客户端静态库EM_FTPClient.LIB,下面对这个库函的API函数做详细说明。

      支持断点续传的FTP库函数说明:

      (1)bool Logon( LPCTSTR lpszHostIP, LPCTSTR lpszUserName=_T(''),
                                  LPCTSTR lpszPassword=_T(''), int nTimeOut="5000" );
      功能描述:登录到FTP服务器
      输入参数 lpszHostIP:服务器IP
      lpszUserName:用户名
      lpszPassword:用户密码(当用户名用与用户密码为空时,将匿名登录)
      nTimeOut:超时设置 1000(mS)<=nTimeOut<=60000(mS)
      返回值 = TRUE:登录FTP服务器成功
      FALSE:登录FTP服务器失败

      (2)bool ChangeDir( LPCTSTR lpszRemoteDir=_T('\\') );
      功能描述:设置远端FTP服务器当前目录
      输入参数 lpszRemoteDir:服务器目录
      返回值 = TRUE:目录更改成功
      FALSE:目录更改失败

      (3)bool ListAll(  FILELIST* fileList  );
       功能描述:获取FTP服务器当前目录下的所有文件的列表
       输入参数 fileList:接收文件列表的结构体
      返回值 = TRUE:获取文件列表成功
      = FALSE:获致文件列表失败
      文件列表数据结构定义如下:
      typedef struct  
      {
            int  nFileNum;      
 //当前目录文件个数
            TCHAR FileList[MAXFILENUM][MAX_PATH]; 
//文件名列表 
                                                                          //(注:当nFileNum = 0 时,此数组中的内容无效)

      }FILELIST;

      (4)bool GetFile( LPCTSTR lpszLocalFile, LPCTSTR lpszRemoteFile,
                                   int nMode = 0, bool bResume=FALSE );
      功能描述:从FTP服务器上下载指定文件(如果下载的文件已存在于本地当前目录下,将覆盖下载)
       输入参数 lpszLocalFile:存储为本地文件名
      lpszRemoteFile:下载的指定文件
      nMode:传输模式  =0: 二进制模式 =1: 文本模式
      bResume:断点续传标志
      =TRUE:继点续传
      (程序将挂断FTP连接,重新执行Logon(),ChangeDir(),然后下载)


 


 


[查看全文]


[技术论坛]


[了解ARM9]


 


 



PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
我要评论
0
2
关闭 站长推荐上一条 /1 下一条