3.3.6 下载文件

2013-10-07 15:55:21 · 作者: · 浏览: 91

3.3.6  下载文件

当用户从FTP服务器下载文件时,使用到的FTP命令是RETR。该命令的用法与上传命令的用法相似。

首先,客户端向服务器发送RETR命令,然后根据获取的文件大小,利用函数Recv()进行接收。

如果接收到的数据小于文件大小,则继续接收,否则关闭数据连接即可。

例如下面的下载文件代码:

  1. int lenth;                                  //已经获取的文件大小    
  2. CString filename;                       //已经获取的文件名称    
  3. int i = 0;    
  4. m_archive->WriteString("RETR " + "\r\n");     
  5. //调用CArchive类的WriteString()函数发送RETR命令    
  6.  
  7. char buff[1024] = {0};                  //设置缓冲区    
  8. SOCKET sock;                                //与服务器建立连接成功后返回的套接字句柄    
  9. CFile file(filename, CFile::modeReadWrite);     //建立文件并指定文件属性为可读可写    
  10.  
  11. while(lenth != 0)     
  12. {    
  13. ::Recv(sock, buff, 1024, NULL);         //在套接字上接收数据到缓冲区中   
  14. file.Write(buff, 1024);                 //将缓冲区内容写到文件中    
  15. lenthlenthlenth = lenth - 1024;          //从文件总大小中减去已经接收并写入文件中的大小  
  16. }    
  17. MessageBox("文件下载成功!");                  //提示文件下载成功   

在上述代码中,也可以使用获取到的文件大小设置接收缓冲区大小,但是这样可能会导致一些不可预见的错误发生。