• 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服务器上获取文件。

  • 相关阅读:
    通过Maven简单搭建SSM框架
    javaWeb常用面试题
    到底什么是对象,什么是对象的引用?对象和对象的引用有那些区别?
    第二章 python中重要的数据结构(下)
    第一章 python中重要的数据结构(上)
    springboot 集成完整的swagger2
    JAVA -> 数据加密和解密 留存
    mac rar文件解压缩
    java 图片合成文字或者awt包下的对话框引入自定义字体库
    java中list或数组中随机子集工具类
  • 原文地址:https://www.cnblogs.com/xydblog/p/3641472.html
Copyright © 2020-2023  润新知