Ftp上传下载

本程序下载地址 

 FTP(File Transfer Protocol)协议主要用来在网络上进行文件传输。FTP通讯除了有一个默认的端口21外,还有其他端口,同城两个端口同时进行数据传输。一个是默认的端口(通常为21),主要进行控制连接,即进行命令协议及服务器端响应码的传输。另一个非标准端口主要进行数据,上传下载文件等。

  实现FTP协议,有两种方式,实用WinInet API和使用基本Winsock。对于一般应用,用WinInet效率要高,而且简单。也可以用Winsock来编写,这样更加灵活,但是复杂度高且需要对协议非常熟悉。

  FTP是MFC的WinInet支持的三个Internet功能(HTTP, gopher)之一,我们需要先创建一个CInternetSession实例和一个CFtpConnection对象就可以实现和一个 FTP服务器的通信。不需要直接创建CFtpConnection对象,而是通过调用CInternetsession::GetFtpConnection来完成这项工作。它创建CFtpConnection对象并返回一个指向该对象的指针。

  要联接到FTP服务器,需要两个步骤,首先必须创建一个CInternetSession对象,用类CInternetSession创建并初始化一个或几个同时存在的Internet会话(session),并描述与代理服务器的连接(如果有必要的话),如果在程序运行期间需要保持与Internet的连接,可以创建一个CInternetsession对象作为类CWinApp的成员。

然后利用CInternetsession对象获取CFtpConnection对象。MFC中的类CFtpConnection管理我们与Internet服务器的连接,并直接操作服务器上的目录和文件。

  下面通过一个例子: 实现Ftp上传文件,下载文件功能。

  程序运行界面如下:

  

  上传功能代码如下:

void CFtpDlg::OnBtnFtpUp() 
{
    // TODO: Add your control notification handler code here
    CInternetSession * pInternetSession = NULL;
    CFtpConnection     * pFtpConnection = NULL;

    //建立连接
    pInternetSession = new CInternetSession(AfxGetAppName());
    
    //服务器的ip地址
    CString strADddress = "192.168.1.61";

    //用户名与密码
    CString strUserName = "test";
    CString strPwd = "123456";

    //服务器的目录
    CString strDir = "\Image";                //服务器中的Image目录下
                                            //若要设置为服务器的根目录,则使用"\"就可以了

    //创建了一个CFtpConnection对象,之后就可以通过这个对象进行上传文件,下载文件了
    pFtpConnection = pInternetSession->GetFtpConnection(strADddress, strUserName, strPwd);

    //设置服务器的目录
    bool bRetVal = pFtpConnection->SetCurrentDirectory(strDir);

    if(bRetVal == false)
    {
        AfxMessageBox("目录设置失败");

        return ;
    }
    else
    {
        //把本地文件上传到服务器上
        CString strLocalFile = "D:\002.jpg";
        CString strRemoteFile = "001.jpg";

        pFtpConnection->PutFile(strLocalFile, strRemoteFile);
    }

    //释放资源
    if(NULL != pFtpConnection)
    {
        pFtpConnection->Close();

        delete pFtpConnection;

        pFtpConnection = NULL;
    }

    if(NULL != pInternetSession)
    {

        delete pInternetSession;
        
        pInternetSession = NULL;
    }
}

  下载功能代码如下:

void CFtpDlg::OnBtnFtpdown() 
{
    // TODO: Add your control notification handler code here
    CInternetSession * pInternetSession = NULL;
    CFtpConnection     * pFtpConnection = NULL;
    
    //建立连接
    pInternetSession = new CInternetSession(AfxGetAppName());
    
    //服务器的ip地址
    CString strADddress = "192.168.1.61";

    //用户名与密码
    CString strUserName = "test";
    CString strPwd = "123456";

    //服务器的目录
    CString strDir = "\Image";                //服务器中的Image目录下
                                            //若要设置为服务器的根目录,则使用"\"就可以了

    //创建了一个CFtpConnection对象,之后就可以通过这个对象进行上传文件,下载文件了
    pFtpConnection = pInternetSession->GetFtpConnection(strADddress, strUserName, strPwd);
    
    //设置服务器的目录
    bool bRetVal = pFtpConnection->SetCurrentDirectory(strDir);
    
    if(bRetVal == false)
    {
        AfxMessageBox("目录设置失败");
        
        return ;
    }
    else
    {
        //把服务器002jpg下载到E盘
        CString strLocalFile = "E:\002.jpg";
        CString strRemoteFile = "002.jpg";
        
        pFtpConnection->GetFile(strRemoteFile, strLocalFile);
    }
    
    //释放资源
    if(NULL != pFtpConnection)
    {
        pFtpConnection->Close();
        
        delete pFtpConnection;
        
        pFtpConnection = NULL;
    }
    
    
    if(NULL != pInternetSession)
    {    
        delete pInternetSession;
        
        pInternetSession = NULL;
    }
}

  当然,前提是得配置好Ftp服务器,这样运行本程序的时候,可以把本地磁盘下的文件拷贝到ftp服务器上,也可以从Ftp服务器上获取文件。

原文地址:https://www.cnblogs.com/xydblog/p/3641472.html