三、FTP客户端编程
在Qt中,QFtp类为我们实现了FTP协议的客户端所需要的功能,比如它不仅提供了完成最常用的各种FTP操作的函数,还能执行任意的FTP命令。需要注意,QFtp类以异步方式工作,比如当我们调用诸如get()或者put()函数时,会立即返回,当控制权返还给Qt的事件循环后,方才进行数据传输。这样做的好处是,当FTP命令执行过程中,用户界面仍能对客户的动作作出迅速的响应。
现在,我们将用实例来说明如何利用get()来检索一个文件。我们的示例是一个控制台程序,名为myftpget,用于下载命令行指定的远程文件。下面让我们首先来看一下该程序的main()函数:
int main(int argc, char *argv[]) { QCoreApplication app(argc, argv); QStringList args = QCoreApplication::arguments(); if (args.count() != 2) { std::cerr << "Usage: myftpget url" << std::endl << "Example:" << std::endl << " myftpget ftp://ftp.xxxxx.com/yyyyyy" << std::endl; return 1; } MyFtpGet getter; if (!getter.getFile(QUrl(args[1]))) return 1; QObject::connect(&getter, SIGNAL(done()), &app, SLOT(quit())); return app.exec(); } |
class MyFtpGet : public QObject { Q_OBJECT public: MyFtpGet(QObject *parent = 0); bool getFile(const QUrl &url); signals: void done(); private slots: void ftpDone(bool error); private: QFtp ftp; QFile file; }; |