Qt实现FTP文件传输协议

        FTP(File Transfer Protocol,文件传输协议)是用于在网络上进行文件传输的一套标准协议,它属于网络传输协议的应用层。它最主要的功能是在服务器与客户端之间进行文件的传输。这个协议使用的是明文传输。FTP服务器的功能除了单纯的进行文件的传输与管理外,依据服务器软件的配置架构,它还可以提供以下几个主要功能:

(1)不同的用户:FTP服务器在默认的情况下,依据用户登录的情况而分为三种不同的身份,分别是:实体用户,real user;访客,guest;匿名用户,anonymous。

(2)命令记录与日志文件记录:FTP可以利用系统的syslogd来进行数据的记录,而记录的数据包括了用户曾经使用过的命令与用户传输数据(传输时间、文件大小等)的记录,所以可以在/var/log/里面找到各项日志信息。

(3)限制用户活动的目录(change root,简称chroot):为了避免用户在你的linux系统中随意切换目录,所以将用户的工作范围局限在用户主目录下面。FTP可以限制用户仅能在自己的用户主目录当中活动。当用户登录FTP后,由于用户无法离开自己的用户主目录,显示的根目录就是自己用户主目录的内容。这种环境称为change root,即chroot,即改变根目录的意思。

1.Qt当中导入FTP相关类

Qt当中FTP相关类,在Qt5之后便删除了,在使用时我们需要将这几个文件加入到项目当中

链接:https://pan.baidu.com/s/117nfMYsIdPWauYB7Ur_2Nw?pwd=u8ub 
提取码:u8ub 

2.FTP初始化及主要信号与槽
    ftp=new QFtp(this);ftp->setTransferMode(QFtp::Passive);connect(ftp,SIGNAL(stateChanged(int)),this,SLOT(slot_stateChanged(int)));connect(ftp,SIGNAL(commandFinished(int,bool)),this,SLOT(slot_command_finish(int,bool)));connect(ftp,SIGNAL(listInfo(QUrlInfo)),this,SLOT(slot_listInfo(QUrlInfo)));
3.FTP上传文件
//上传文件
void MainWindow::upload_file(QString src, QString dst)
{if(!(ftp->state()==QFtp::LoggedIn && ftp!=nullptr)){return;}if(up_file!=nullptr)delete up_file;up_file = new QFile(src);if (up_file != nullptr && up_file->open(QIODevice::ReadOnly)) {ftp->put(up_file, dst);}
}
4.FTP下载文件
//下载文件
void MainWindow::download_file(QString src, QString dst)
{if(!(ftp->state()==QFtp::LoggedIn && ftp!=nullptr)){return;}if(down_file!=nullptr)delete down_file;down_file = new QFile(dst);if (down_file != nullptr && down_file->open(QIODevice::WriteOnly)) {ftp->get(src, down_file);}
}
5.FTP获取当前目录下所有文件
ftp->list(dir_path);
6.FTP状态改变槽函数
void MainWindow::slot_stateChanged(int state)
{if(state==QFtp::Unconnected){ui->pushButton->setEnabled(false);ui->pushButton_2->setEnabled(false);ui->listWidget->setEnabled(false);ftp->connectToHost(ftp_ip,ftp_port);QMessageBox::warning(this,"操作提示","FTP连接断开");}else if(state == QFtp::Connected){ftp->login(ftp_user,ftp_password);}else if(state == QFtp::LoggedIn){ui->pushButton->setEnabled(true);ui->pushButton_2->setEnabled(true);ui->listWidget->setEnabled(true);ftp->list(dir_path);list_dir.clear();list_file.clear();}
}

注意:FTP在长时间没有进行任何操作时,可能会进行断开重连操作

7.FTP命令执行完成槽函数
void MainWindow::slot_command_finish(int id, bool fail)
{Q_UNUSED(id)if(fail){QMessageBox::warning(this,"操作提示",QString("%1 命令执行失败,%2").arg(ftp->currentCommand()).arg(ftp->errorString()));}else{if(ftp->currentCommand() == QFtp::List){update_list();}else if(ftp->currentCommand() == QFtp::Put){QMessageBox::information(this,"操作提示","上传成功");ftp->list(dir_path);list_dir.clear();list_file.clear();ui->label->setText(dir_path);}else if(ftp->currentCommand() == QFtp::Get){QMessageBox::information(this,"操作提示","下载成功");}}
}

注意:在执行完成命令之后,获取当前命令可能会变为None,所以我们在执行FTP操作之前最好设置一个标志位或一个枚举变量

8.FTP获取文件信息槽函数,在执行list命令时执行
void MainWindow::slot_listInfo(QUrlInfo info)
{if(info.isDir())list_dir.append(info.name());else if(info.isFile())list_file.append(info.name());
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/602497.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据库的连接

连接数据库 我们使用WinR输入cmd打开运行窗口 输入:sqlplus并回车 输入用户名和密码,我用的是Scott,密码我自己设置的123456,Scott默认的密码是tiger,回车 这种情况表示登录成功 在连接Scott成功的情况下创建一些数据,在我的资源里面有个Oracle数据基础可以下载,直接复制粘…

Golang 接口

前言 在 Go 语言中,接口(interface)是一种类型,它规定了一组方法签名(method signatures),但不实现这些方法。任何实现了接口中所有方法的类型都隐式地实现了该接口,无需显式声明继…

认证评价的方法

认证评价是对于个人或组织的能力、技能或知识的确认,通常用于确保质量、安全或合规性。以下是一些常用的认证评价方法: 资格审查 资格审查是认证评价的第一步,主要评估个人或组织是否具备参与认证的基本条件。例如,对于某些专业…

MFC与Qt多个控件响应统一响应消息处理

就目前使用C开发框架来说,今天来讲述下MFC框架下与Qt框架下,如何让多个控件响应统一消息处理方法。 功能:假设有5个按钮,需要响应同一个处理函数,该如何实现呢? Qt方式 开发环境:win10 VS201…

快速了解云计算与云原生

快速了解云计算与云原生 云计算云原生DevOps容器持续交付微服务 云计算 在讲云原生之前,先来讲讲云计算 其中云原生属于技术架构理念,而云计算提供应用所需的基础资源,云计算是云原生的基础,两者是相辅相成的 云计算简单来说&a…

嵌入式(四)定时器 | 定时器功能 分类 定时器工作模式 寄存器全介绍

文章目录 1 定时器工作原理2 定时器功能3 定时器分类3.1 定时器13.2 定时器23.3 定时器3和定时器43.4 睡眠定时器3.5 看门狗定时器 4 定时器工作模式4.1 自由运行模式4.2 模模式4.3 正计数/倒计数模式 5 定时器1寄存器5.1 计数寄存器5.2 计数控制寄存器 6 定时器的两种使用方式…

Android 打开热点2.4G系统重启解决

Android 打开热点2.4G系统重启解决 文章目录 Android 打开热点2.4G系统重启解决一、前言二、过程分析1、Android 设备开机后第一次打开热点2.4G系统重启2、日志分析3、设备重启原因 三、解决方法四、其他1、wifi/有线网 代理信息也可能导致系统重启2、Android13 热点默认5G频道…

网络报文分析程序的设计与实现(2024)

1.题目描述 在上一题的基础上,参照教材中各层报文的头部结构,结合使用 wireshark 软件(下载地址 https://www.wireshark.org/download.html#releases)观察网络各层报文捕获,解析和分析的过程(如下 图所示&a…

【Linux基础】Linux主要指令的详解(指令补充)

1.cp指令(重要) 语法: cp [选项] 源文件或目录 目标文件或目录 功能: 复制文件或目录 说明: cp指令用于复制文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则它会把前面指…

pytorch集智-2单车预测器

完整代码在个人主页简介链接pytorch路径下可找到 1 单车预测器1.0 1.1 人工神经元 对于sigmoid函数来说,w控制函数曲线的方向,b控制曲线水平方向位移,w控制曲线在y方向的幅度 1.2 多个人工神经元 模型如下 数学上可证,有限神经…

Linux查找命令@which、find

目录 which概念语法作用 find概念语法按文件名查找按文件大小查找 作用演示一演示二演示三 通配符 which 概念 which 是一个常用的 Linux/Unix 命令,用于查找并显示指定命令的绝对路径。 语法 which 要查找的命令 》无参数。 》 which后面,跟要查找绝对…

【CentOS 7.9】死机卡住如何处理

一、解决办法 1.打开tty2 按下组合键:ctrl alt F2 进入 tty2 2.进入 root 权限 su root3.杀死该用户的所有进程(相当于 windows 里面的注销用户) 请注意,用户名应该全部使用小写字母,如我的用户名叫 Ragdoll&am…

摄像头视频录制程序使用教程(Win10)

摄像头视频录制程序-Win10 🥗介绍🍛使用说明🚩config.json 说明🚩启动🚩关闭🚩什么时候开始录制?🚩什么时候触发录制?🚩调参 🥗介绍 检测画面变化…

Javaweb之Mybatis的基础操作之查询操作的详细解析

1.6 查询 1.6.1 根据ID查询 在员工管理的页面中,当我们进行更新数据时,会点击 “编辑” 按钮,然后此时会发送一个请求到服务端,会根据Id查询该员工信息,并将员工数据回显在页面上。 SQL语句: select id,…

大型语言模型的幻觉问题

1.什么是大模型幻觉? 在语言模型的背景下,幻觉指的是一本正经的胡说八道:看似流畅自然的表述,实则不符合事实或者是错误的。 幻觉现象的存在严重影响LLM应用的可靠性,本文将探讨大型语言模型(LLMs)的幻觉问题&#x…

求两个数之间的最小公约数

目录 前言 方法:求两个数之间的最小公约数 1.欧几里得算法 2.枚举法 3.公共因子积 4.更相减损术 5.Stein算法 解题:在链表中插入最大公约数 总结 前言 今天刷每日一题:2807. 在链表中插入最大公约数 - 力扣(LeetCode)…

基于X86的助力智慧船载监控系统

船载综合监控系统结合雷达、AIS、CCTV、GPS等探测技术,以及高度融合的实时态势与认知技术,实现对本船以及范围内船舶的有效监控,延伸岸基监控中心监管范围,保障行船安全,为船舶安全管理部门实现岸基可控的数据通信和动…

【通过javascript实现:长时间未对html页面操作,自动退出系统,返回至login.html】

功能:针对某html页面,如果长时间没有对页面进行任何操作,则退出系统,返回至login.html 思路分析: step1 设置超时时间:timeoutDuration10分钟,因为是以毫秒为单位,所以需要乘以100…

第 121 场 LeetCode 双周赛题解

A 大于等于顺序前缀和的最小缺失整数 模拟&#xff1a;先求最长顺序前缀的和 s s s &#xff0c;然后从 s s s 开始找没有出现在 n u m s nums nums 中的最小整数 class Solution { public:int missingInteger(vector<int> &nums) {unordered_set<int> vis(…

JavaScript 变量

在JavaScript中&#xff0c;变量是一种存储数据的容器。它们可以存储任何类型的数据&#xff0c;包括数字、字符串、布尔值、对象、数组等。 在JavaScript中&#xff0c;变量是通过使用var、let或const关键字来声明的。 以下是声明和初始化变量的基本语法&#xff1a; 使用v…