4.3.5 下载文件
当用户从FTP服务器下载文件时,使用到的FTP命令是RETR。该命令的用法与上传命令的用法相似。首先,客户端向服务器发送RETR命令,然后根据获取的文件大小,利用函数Recv()进行接收。如果接收到的数据小于文件大小则继续接收,否则关闭数据连接即可。获取文件大小和文件名称的方法在4.3.3节中已经讲解,这里不再赘述。下载文件的代码如下:
- int lenth; //已经
获取的文件大小 - CString filename; //已经
获取的文件名称 - int i=0;
- m_archive->WriteString("RETR "+"\r\n");
- //调用CArchive类的WriteString()
函数发送RETR命令 - char buff[1024]={0}; //设置缓冲区
- SOCKET sock; //与服务器建立连接成
功后返回的套接字句柄 - CFile file(filename,CFile::modeReadWrite); //建立
文件并指定文件属性为可读可写 - while(lenth!=0)
- {
- ::Recv(sock,buff,1024,NULL); //在套接字上接收数据到缓冲区中
- file.Write(buff,1024); //将缓冲区内容写到文件中
- lenthlenth=lenth-1024; //从文件总
大小中减去已经接收并写入文件中的大小 - }
- MessageBox("文件下载成功!"); //否则提示文件下载成功
在代码中,用户也可以使用获取到的文件大小设置接收缓冲区大小,但是这样做会导致一些不可预见的错误发生。