zoukankan      html  css  js  c++  java
  • 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服务器上获取文件。

  • 相关阅读:
    BGP
    物联网时代的智能家居
    Linux下找不到动态链接库
    Java清洁:终结处理和垃圾回收
    单例模式的改进
    shell脚本中的括号和实例
    shell如何生成rpm包仓库列表文件的对比结果
    shell脚本实现覆盖写文件和追加写文件
    怎么用命令查看某个目录下子目录占用空间的大小
    利用shell脚本函数实现网络连通性的检测
  • 原文地址:https://www.cnblogs.com/xydblog/p/3641472.html
Copyright © 2011-2022 走看看