Qt之QFtp

简述

QFtp 类提供了一个 FTP 协议的客户端实现。

该类提供了一个到 FTP 的直接接口允许对请求有更多的控制。但是对于新的应用程序建议使用 QNetworkAccessManager 和 QNetworkReply因为这些类拥有一个更简单、还更强大的 API。

QFtp

QFtp 异步工作因此没有阻塞函数。如果无法立即执行操作函数仍将立即返回并且该操作将被调度以供以后执行。调度操作的结果通过信号报告这种方法依赖于事件循环操作。

可以调度的操作也被称为“命令”有connectToHost()、login()、close()、list()、cd()、get()、put()、remove()、mkdir()、rmdir()、rename() 和 rawCommand()。

所有这些命令都会返回一个唯一的标识符允许跟踪当前正在执行的命令。当命令的执行开始时发出带有命令标识符的 commandStarted() 信号。当命令完成时会发出 commandFinished() 信号并带有命令标识符和一个 bool 参数表明该命令在完成时是否出错。

在某些情况下可能想要执行一系列命令。例如如果要连接并登录到 FTP 服务器简单的实现如下

QFtp *ftp = new QFtp(parent);
ftp->connectToHost("192.168.***.***", 21);
ftp->login("wang", "123456");

在这种情况下调度了两个 FTP 命令。当最后一个调度命令完成时会发出 done() 信号并带有一个 bool 参数告诉你序列在完成时是否出错。

如果命令序列中的某个命令的执行期间发生错误则所有挂起的命令即已调度但尚未执行的命令会被清除并且不为它们发射信号。

一些命令例如 list() 会发出额外的信号listInfo()以报告其结果。

对于文件传输QFtp 可以使用主动或被动模式并且默认使用被动文件传输模式可使用 setTransferMode() 设置。

调用 setProxy() 使 QFtp 通过 FTP 代理服务器连接。

函数 hasPendingCommands() 和 clearPendingCommands() 允许查询和清除挂起的命令列表。

如果你在网络方便比较有经验想要有完整的控制可以使用 rawCommand() 来执行任意 FTP 命令。

警告当前版本的 QFtp 不完全支持非 Unix FTP 服务器。

工作流程

如果要从 FTP 服务器下载 /home/wang/ftp.qdoc 文件可以分为下面几步

ftp->connectToHost("192.168.***.***", 21);     // id == 1
ftp->login("wang", "123456");                  // id == 2
ftp->cd("/home/wang");                         // id == 3
ftp->get("ftp.qdoc");                          // id == 4
ftp->close();                                  // id == 5

流程如下

  1. connectToHost() - 指定主机和端口号连接 FTP 服务器
  2. login() - 指定用户名和密码登录到 FTP 服务器
  3. cd() - 改变服务器的工作目录为 /etc类似于 Linux 下的命令行cd /home/wang
  4. get() - 从服务器上下载文件 passwd绝对路径为/home/wang/ftp.qdoc
  5. close() - 关闭到 FTP 服务器的连接

对于该示例发射以下序列的信号

commandStarted(1)
stateChanged(HostLookup)
stateChanged(Connecting)
stateChanged(Connected)
commandFinished(1, false)

commandStarted(2)
stateChanged(LoggedIn)
commandFinished(
  • 7
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值