3.3.6 下载文件
当用户从FTP服务器下载文件时,使用到的FTP命令是RETR。该命令的用法与上传命令的用法相似。
首先,客户端向服务器发送RETR命令,然后根据获取的文件大小,利用函数Recv()进行接收。
如果接收到的数据小于文件大小,则继续接收,否则关闭数据连接即可。
例如下面的下载文件代码:
- 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); //将缓冲区内容写到文件中
- lenthlenthlenth = lenth - 1024; //从文件总大小中减去已经接收并写入文件中的大小
- }
- MessageBox("文件下载成功!"); //提示文件下载成功
在上述代码中,也可以使用获取到的文件大小设置接收缓冲区大小,但是这样可能会导致一些不可预见的错误发生。