【发布时间】:2019-07-08 09:20:30
【问题描述】:
我需要一个非常简单的控制台应用程序来 FTP 到服务器并获取一些文件,我尝试使用 QNetworkAccessManager,它似乎无法正常工作并且什么也得不到。
这是我的代码,
ftp.h
#ifndef FTP_H
#define FTP_H
#include <string>
#include <vector>
#include <qstring.h>
#include <qfile.h>
#include <QNetworkAccessManager>
#include <QUrl>
#include <QNetworkRequest>
#include <QNetworkReply>
#include "qdebug.h"
#include <QCoreApplication>
#include <QDebug>
#include <string>
#include <iostream>
#include <sstream>
#include <QTextStream>
#include <QObject>
class ftp
{
// Q_OBJECT
public:
ftp();
private:
QNetworkAccessManager *manager;
QNetworkReply *reply;
private slots:
void slotError(QNetworkReply::NetworkError code);
void replyFinished(QNetworkReply *reply);
};
#endif // FTP_H
ftp.cpp
#include "ftp.h"
#include "QDebug"
#include <qstring.h>
#include <qfile.h>
#include <QNetworkAccessManager>
#include <QUrl>
#include <QNetworkRequest>
#include <QNetworkReply>
#include "qdebug.h"
#include <QCoreApplication>
#include <QDebug>
#include <string>
#include <iostream>
#include <sstream>
#include <QTextStream>
#include <QObject>
using namespace std;
ftp::ftp()
{
qDebug() << "ZSS Server Program Running Now ...";
QTextStream cin(stdin);
QString username;
QString password;
QString ip;
QString port;
cout << "Username : ";
username = cin.readLine();
cout << "Password : ";
password = cin.readLine();
cout << "IP Address : ";
ip = cin.readLine();
cout << "Port Number : ";
port = cin.readLine();
QUrl url;
url.setScheme("ftp");
url.setHost("10.228.7.74");
url.setPath("/try/hello.txt");
url.setPort(21);
url.setUserName("ftpTest");
url.setPassword("ftpTest");
QNetworkRequest request(url);
//request.setUrl(url);
qDebug() << url;
//cout << "Downloading File...";
manager = new QNetworkAccessManager;
reply = manager->get(request);
QByteArray buffer = reply->readAll();
qDebug() << buffer;
// connect(reply , SIGNAL(error(QNetworkReply::NetworkError)), this,SLOT(slotError(QNetworkReply::NetworkError)));
// connect(manager, SIGNAL(finished(QNetworkReply*)),this,SLOT(replyFinished(QNetworkReply*)));
}
void ftp::slotError(QNetworkReply::NetworkError code)
{
qDebug() << reply->errorString();
}
void ftp::replyFinished(QNetworkReply *reply)
{
// QTextCodec *codec = QTextCodec::codecForName("utf8");
// QString all = codectoUniCode(reply->readAll());
// cout >> all;
// reply->deleteLater();
}
在我运行我的代码后,在我的文件夹中,我看不到任何文件。所以我 qDebug() 出了所有的响应和缓冲区,我发现缓冲区和响应是空的,是不是我遗漏了任何部分或做错了其他事情?我可以得到一个简单的例子吗?
这是控制台输出截图,
我 qDebug() 缓冲区,但缓冲区上没有任何东西,我使用 3CDaemon 创建了这个 ftp 本地服务器,我指向正确的文件夹并且我的 ftp 服务器正在运行,我可以使用命令提示进入ftp并获取文件,只是无法使用Qt。
请帮帮我,这已经困扰我几天了..谢谢..
【问题讨论】:
标签: c++ qt ftp qt5 qnetworkaccessmanager