QT实现FTP上传文件

本文实例为大家分享了QT实现FTP上传文件的具体代码,供大家参考,具体内容如下

两台电脑通过网线建立本地连接,保证网关在同一段;

服务器端打开ftp;

控制面板→程序→启用或关闭windows功能→windows功能→Internet信息服务
启用“FTP服务”FTP扩展性” IIS管理控制台”

开始屏幕的搜索中输入“IIS”,然后点击打开“IIS管理器”
打开“IIS管理器”后,在左栏的“网站”上点击右键,打开“添加FTP站点”
然后按照提示填写站点信息
点击“下一步”,按照下图提示,设置“绑定和SSL设置”,在“IP地址”处,可以用内网IP也可以用外网IP,访客自然也就根据你的IP设定来决定;
点击“下一步”,设置“身份验证和授权信息”
然后在本机浏览器地址栏中输入“ftp://填写的IP”测试一下

客户端网页测试远程访问;

客户端(另一台电脑)浏览器地址栏中输入“ftp://填写的IP”测试一下

客户端cmd测试远程访问;

win+r打开运行窗口,输入cmd
回车打开cmd命令窗口
cmd命令中输入:ftp回车
回车切换至ftp命令窗口,输入命令:open,回车提示:到
到即所要连接测试的ftp地址,我们输入:IP 22
即:ip地址+空格+端口号,没有+号
回车后弹出用户一行,输入ftp的用户名后回车,输入ftp用户名对应的密码
输入密码后回车,如果提示,user logged in就说么ftp创建无问题

客户端程序测试远程访问。

新建程序,添加ftpclass.cpp、ftpclass.h,复制main.cpp内容到程序入口函数
注意:/项目-属性-常规-字符集-使用多字节字符集/

//main.cpp
#include "stdafx.h"
#include "ftpclass.h"

void main()
{
    printf("------- 开始测试!------\n");
    printf("01--创建连接 %d\n", FtpClass::createConnection());
    printf("02--打开目标ftp %d\n", FtpClass::createTable());    
    
    /*可以读取ini内参数
    FtpClass::ftp_Ip = TEXT("Ini读取");
    FtpClass::ftp_Port = TEXT("Ini读取");
    FtpClass::ftp_User = TEXT("Ini读取");
    FtpClass::ftp_Password = TEXT("Ini读取");
    FtpClass::ftp_Fixed_Path = TEXT("Ini读取");*/
    
    printf("03--创建文件夹 %d\n", FtpClass::createFolder("自动生成目录1","自动生成目录2","自动生成目录3"));    
    /*上传目标路径*/

    printf("04--上传文件 %d\n", FtpClass::insert( "D:/a.txt", "b.txt"));
    /*本机文件需要上传文件*/  /*上传后文件名称,可以和本地文件名称不一样,类型最好别换*/
    
    printf("05--关闭通讯 %d\n", FtpClass::createClose());
    printf("------ 结束测试!------\n");
    
    return ;
}
//ftpclass.h
/*项目-属性-常规-字符集-使用多字节字符集*/
/*wininet.lib、shlwapi.lib可以直接添加到附加依赖项*/
/*BOOL_VERIFY、NULL_VERIFY 程序结束判断*/

#pragma once

#pragma comment(lib,"wininet.lib")
#pragma comment(lib,"shlwapi.lib")

#define  BOOL_VERIFY(emStatus_bool,switch_bool) \
if (emStatus_bool == true)\
{return true;}\
else{\
if (switch_bool == 3) printf("      FTP_03_err:创建文件夹失败!%d\n"); \
if (switch_bool == 4) printf("      FTP_04_err:上传文件失败!\n");     \
if (switch_bool == 5) printf("      FTP_05_err:关闭窗口句柄失败!\n"); \
return false;\
}

#define  NULL_VERIFY(emStatus_null,switch_null) \
if (emStatus_null != NULL)\
{return true;}\
else{\
if (switch_null == 1) {printf("      FTP_01_err:打开通讯错误 Error:%d\n", GetLastError());}\
if (switch_null == 2) {printf("      FTP_02_err:建立连接错误 Error:%d\n", GetLastError());}\
return false;\
}

#include "stdafx.h"//没用
#include <afxinet.h>//MFC相关
#include "wininet.h"//调用FTP相关类
#include "shlwapi.h"//调用文件操作相关类

class FtpClass
{
public:    
    /*ini读取变量*/
    static CString ftp_Ip;//目标ip
    static CString ftp_Port;//目标端口
    static CString ftp_User;//目标账户
    static CString ftp_Password;//目标密码
    static CString ftp_Fixed_Path;//目标固定路径
    static CString ftp_Free_Path;//目标自己生成路径
    
     /*全局变量*/
    static BOOL  pRes;
    static HINTERNET hInternet;
    static HINTERNET hConnect;
    
    /*全局函数*/
    static bool createConnection();                                            //创建一个连接
    static bool createTable();    
    static bool ThreadInternetConnect(PVOID ) 
    //打开目标ftp
    static bool createFolder(CString temp1, CString temp2, CString temp3);  //上传文件
    static bool insert(CString temp, CString temp1);                        //出入数据
    static bool createClose();                                              //断开连接
};
//ftpclass.cpp
#include "stdafx.h"
#include "ftpclass.h"

CString FtpClass::ftp_Ip = TEXT("192.168.3.104");
CString FtpClass::ftp_Port = TEXT("21");
CString FtpClass::ftp_User = TEXT("Administrator");
CString FtpClass::ftp_Password = TEXT("xinxin");
CString FtpClass::ftp_Fixed_Path = TEXT("1级固定目录/2级固定目录/3级固定目录");
CString FtpClass::ftp_Free_Path = TEXT("自动生成目录");
BOOL  FtpClass::pRes = false;
HINTERNET FtpClass::hInternet = NULL;
HINTERNET FtpClass::hConnect = NULL;

//创建一个连接
bool FtpClass::createConnection() {
    /*ftp_Ip = TEXT("Ini读取");
    ftp_Port = TEXT("Ini读取");
    ftp_User = TEXT("Ini读取");
    ftp_Password = TEXT("Ini读取");
    ftp_Fixed_Path = TEXT("Ini读取");*/

    hInternet = InternetOpen(NULL, INTERNET_OPEN_TYPE_DIRECT,
        NULL, NULL, INTERNET_FLAG_NO_CACHE_WRITE);
    NULL_VERIFY(hInternet,1);
}
bool FtpClass::ThreadInternetConnect(PVOID param) {

 // 打开http      
 hConnect = InternetConnect(hInternet, ftp_Ip, INTERNET_DEFAULT_FTP_PORT,//INTERNET_DEFAULT_FTP_PORT  第三个参数默认值21
  ftp_User, ftp_Password, INTERNET_SERVICE_FTP,
  INTERNET_FLAG_EXISTING_CONNECT || INTERNET_FLAG_PASSIVE, 0);

 return 1;
}

//打开目标ftp
bool FtpClass::createTable()
{
 /*hConnect = InternetConnect(hInternet, ftp_Ip, 25,//INTERNET_DEFAULT_FTP_PORT  第三个参数默认值21
  ftp_User, ftp_Password, INTERNET_SERVICE_FTP,
  INTERNET_FLAG_EXISTING_CONNECT || INTERNET_FLAG_PASSIVE, 0);
 NULL_VERIFY(hConnect,2);*/
 HANDLE hThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)ThreadInternetConnect, (LPVOID)NULL, 0, NULL); 
 //超时3秒,如果等待结果是超时
 if (WaitForSingleObject(hThread, 3 * 1000) == WAIT_TIMEOUT) {
  TerminateThread(hThread, 0);
  CloseHandle(hThread);
  NULL_VERIFY(hConnect, 2);  
 }
 NULL_VERIFY(hConnect, 2);
}

//上传文件
bool FtpClass::createFolder(CString temp1, CString temp2, CString temp3)
{
    /*新建文件件每次只能创建一级,多个需要分多次创建*/
    pRes = false;    
    ftp_Free_Path = "";
    ftp_Free_Path = ftp_Fixed_Path  + "/" + temp1;
    FtpCreateDirectory(hConnect, ftp_Free_Path);
    ftp_Free_Path = ftp_Free_Path + "/" + temp2;
    FtpCreateDirectory(hConnect, ftp_Free_Path);
    ftp_Free_Path = ftp_Free_Path + "/" + temp3;
    pRes = FtpCreateDirectory(hConnect, ftp_Free_Path);
    BOOL_VERIFY(pRes,3);
}
//出入数据
bool FtpClass::insert(CString temp, CString temp1)
{
    pRes = false;
    ftp_Free_Path = ftp_Free_Path + "/" +temp1;
    pRes = FtpPutFile(hConnect, temp,/*本机文件*/
        ftp_Free_Path,  /*TEXT("一级目录/二级目录/三级目录/a.txt"),*/
        FTP_TRANSFER_TYPE_ASCII, 0);
    BOOL_VERIFY(pRes,4);
}
//断开连接
bool FtpClass::createClose()
{    
    pRes = false;
    if (InternetCloseHandle(hConnect))
        pRes = InternetCloseHandle(hInternet);
    BOOL_VERIFY(pRes,5);
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Qt实现FTP的上传和下载的实例代码

    为了方便网络编程,Qt 提供了 Network 模块.该模块包含了许多类,本文介绍了Qt实现FTP的上传和下载,分享给大家 本来想简单抄抄书,随便手写个Ftp客户端的,结果发现教材上的是基于Qt4的QFtp类库,而在Qt5中取消了这一个类库(同时也取消了QHttp等的类),取而代之的是QNetworkAccessManager 这个类,把这些杂货全都揽下来了,据说是因为之前的两个类有重复而且效率有问题balabala.于是就百度了一下,发现百度上要么讲的不全,要么就是要去下一个由热心网民重新封装

  • Qt QFtp客户端实现上传下载文件

    目录 1.简介 2.用到的主要类 2.1QNetworkReply 2.2QNetworkRequest 3.示例 3.1本地搭建一个FTP服务器. 3.2示例 1.简介 实现FTP客户端有几种方式. Qt4 QFtp类 Qt5 QNetworkAccessManager类 QNetworkAccessManager支持大多数的网络协议,比如http.ftp等,这里主要讲解QNetworkAccessManager实现的FTP客户端. 需要添加 Qt += network 模块. 2.用到的主要

  • QT实现FTP上传文件

    本文实例为大家分享了QT实现FTP上传文件的具体代码,供大家参考,具体内容如下 两台电脑通过网线建立本地连接,保证网关在同一段: 服务器端打开ftp: 控制面板→程序→启用或关闭windows功能→windows功能→Internet信息服务启用“FTP服务”FTP扩展性” IIS管理控制台” 开始屏幕的搜索中输入“IIS”,然后点击打开“IIS管理器”打开“IIS管理器”后,在左栏的“网站”上点击右键,打开“添加FTP站点”然后按照提示填写站点信息点击“下一步”,按照下图提示,设置“绑定和SS

  • PHP实现ftp上传文件示例

    FTP上传是PHP实现的一个常见且非常重要的应用技巧,今天就来与大家分享一下PHP实现FTP上传文件的简单示例.希望对大家的PHP学习能带来一定的帮助. 主要代码如下: function make_directory($ftp_stream, $dir){ // if directory already exists or can be immediately created return true if ($this->ftp_is_dir($ftp_stream, $dir) || @ftp

  • 批处理FTP上传文件

    背景:本机一个文件"A.TXT"在C盘根目录下,需要上传到FTP服务器"192.168.0.1"的"X"目录下面 复制代码 代码如下: @echo off set ftpfile=putfiles.ftp set logfile=putfiles.log echo open 192.168.0.1 > "%ftpfile%" rem 把下面行中的 username和password改为你的用户名和密码 echo user

  • Python ftp上传文件

    以下代码比较简单,对python实现ftp上传文件相关知识感兴趣的朋友可以参考下 #encoding=utf8 from ftplib import FTP #加载ftp模块 IP = '103.240.150.104' user = 'webmaster@stchat.cn' password = '5' filename = 'zhihu.html' path = '/root/Desktop/zhihu.html' ftp=FTP() #设置变量 ftp.set_debuglevel(2)

  • Python实现FTP上传文件或文件夹实例(递归)

    本文实例讲述了Python实现FTP上传文件或文件夹实例.分享给大家供大家参考.具体如下: import sys import os import json from ftplib import FTP _XFER_FILE = 'FILE' _XFER_DIR = 'DIR' class Xfer(object): ''''' @note: upload local file or dirs recursively to ftp server ''' def __init__(self): s

  • c# FTP上传文件实例代码(简易版)

    实例如下: /// <summary> /// 上传ftp服务 /// </summary> /// <param name="path">文件地址</param> /// <returns></returns> public string Upload(string path) { var client = new WebClient(); client.Credentials = new NetworkCred

  • Java使用FTP上传文件并模拟接受的方法

    0. 导入相关依赖 <!-- FTP --> <dependency> <groupId>commons-net</groupId> <artifactId>commons-net</artifactId> <version>3.6</version> </dependency> <!-- Hutool:一个小而全的Java工具类库,具体介绍参照附录1 --> <dependenc

  • C#实现FTP上传文件的方法

    1.通过用FTP进行上传文件,首先要实现建立FTP连接,一般建立FTP连接,需要知道FTP配置有关的信息.一般要在Bean中建立一个ServiceFileInfo.cs文件进行记录,一般需要FTP地址.登录用户名和登录密码.然后通过其他页面进行访问读取.代码样式如下: class ServiceFileInfo { // service1 public static string txtFilePath = @"ftp://12.128.128.01/FileName/"; //use

  • 使用xshell连接远程服务器并使用ftp上传文件的方法

    目录 一.下载安装 二.Xshell配置及使用 三.Xftp配置及使用 由于服务器安装的Ubuntu 16.04系统默认是没有图形化界面的,所以上传和下载文件都比较麻烦.而且每次我们都需要使用命令行来进行连接. 虽然阿里云控制台提供了远程连接,但是每次都要先在浏览器里登录,然后再打开实例输入密码登录过于麻烦.所以推荐使用Xshell连接远程服务器进行操作,使用Xftp操作文件. 一.下载安装 官网链接,填入姓名和邮箱即可邮件获得免费下载链接,我们使用家庭学校免费版即可. 二.Xshell配置及使

  • php实现通过ftp上传文件

    大概原理 遍历项目中的所有非排除文件,然后获取 文件修改时间晚于文件上一次修改时间 的文件 然后将这些文件,通过ftp上传到对应的目录 具体代码如下: 因为只是工具,代码很乱,见谅 <?php error_reporting(7); if ($_SERVER['SERVER_ADDR'])exit;//禁止在web服务器下运行 $_GET['exclude'] = array('number.txt','uploads','Zend','docs','cache','You','managesd

随机推荐