ich habe ein Problem mit QFtp.
Mein Programm soll eine Datei per FTP auf einen Server schieben.
Da die Datei lokal immer gleich heißt mache ich vor dem hochladen
ein list() und schaue wie die Dateien heißen die schon im Ftp-Eingang liegen.
Leider funktioniert das list() nicht.
Ich habe mit einem Netzwerktool herausgefunden, dass da niemals eine
Antwort auf mein list kommt.
Mit Filezilla ist der ausgehende Port 21 und der eingehende Port 20.
Bei meinem Tool geht auf 21 was raus, aber kein Port wird von außen angesprochen.
Hier mal FTP spezifische Code:
Code: Alles auswählen
void upload(void){
QFile *upload_datei = new QFile(lineEdit_dateiname->text()+".txt");
if(upload_datei->size() > 0){
ftp = new QFtp(this);
connect(ftp, SIGNAL(commandFinished(int, bool)),
this, SLOT(ftpCommandFinished(int, bool)));
connect(ftp, SIGNAL(listInfo(const QUrlInfo &)),
this, SLOT(addToList(const QUrlInfo &)));
connect(ftp, SIGNAL(dataTransferProgress(qint64, qint64)),
this, SLOT(updateDataTransferProgress(qint64, qint64)));
connect(ftp, SIGNAL(done( bool )),
this, SLOT(loeschen( bool )));
ftp->setTransferMode(QFtp::Active);
ftp->connectToHost(lineEdit_ipftpserver->text(),21);
ftp->login(lineEdit_ftpbeutzername->text(),lineEdit_ftppasswort->text());
ftp->list();
pushButton_abfragen->setEnabled(false);
pushButton_upload->setEnabled(false);
pushButton_beenden->setEnabled(false);
pushButton_upload->setText(tr("Uploading...."));
}
else{
QMessageBox::information(this, tr("FTP"),
tr("<h2>Keine Daten zum Upload vorhanden!</h2>")
.arg(lineEdit_ipftpserver->text()));
}
upload_datei->close();
delete upload_datei;
}//upload
void ftpCommandFinished(int, bool error)
{
QFile *upload_datei = new QFile(lineEdit_dateiname->text()+".txt");
if(!upload_datei->exists()){
QMessageBox::information(this, tr("FTP"),
tr("<h2>Die Datei konnte nicht gefunden werden</h2>Bitte kontrollieren Sie die Angabe für den Dateinamen. <br> Eventuell ist die Datei bereits hochgeladen, fragen Sie in diesem Fall die Daten erneut ab.")
.arg(lineEdit_ipftpserver->text()));
pushButton_abfragen->setEnabled(true);
pushButton_upload->setEnabled(true);
pushButton_beenden->setEnabled(true);
pushButton_upload->setText(tr("Upload"));
}
if (ftp->currentCommand() == QFtp::ConnectToHost) {
if (error) {
QMessageBox::information(this, tr("FTP"),
tr("<h2>Die Verbingung zum Server konnte nicht hergestellt werden!</h2>Bitte kontrollieren Sie Ihre Einstellungen, und stellen Sie die Verbindung zum Internet sicher.")
.arg(lineEdit_ipftpserver->text()));
pushButton_abfragen->setEnabled(true);
pushButton_upload->setEnabled(true);
pushButton_beenden->setEnabled(true);
pushButton_upload->setText(tr("Upload"));
return;
}
}
if (ftp->currentCommand() == QFtp::Login) {
if (error) {
QMessageBox::information(this, tr("FTP"),
tr("<h2>Der Login ist fehlgeschlagen!</h2>Bitte kontrollieren Sie Ihren Benutzernamen und Passwort.")
.arg(lineEdit_ipftpserver->text()));
pushButton_abfragen->setEnabled(true);
pushButton_upload->setEnabled(true);
pushButton_beenden->setEnabled(true);
pushButton_upload->setText(tr("Upload"));
return;
}
}
if (ftp->currentCommand() == QFtp::List) {
if(zaehler == 0){
ftp->put(upload_datei,lineEdit_dateiname->text()+".txt",QFtp::Ascii);
}
else{
QString zahl;
bool gefunden = false;
QString dateiname;
for(int i=1;i<=(zaehler+1);i++){
zahl.setNum(i);
dateiname = (lineEdit_dateiname->text()+zahl+".txt");
for(int j=0; j<dateinamen.count(); j++){
if(dateinamen[j] == dateiname){
gefunden = true;
break; //aus innerer Schleife herausspringen, da gefunden
}
}
if(gefunden == true){
gefunden = false;
}
else{
break; //aus aussen Schleife herausspringen, da name nicht gefunden
}
}
ftp->put(upload_datei,dateiname,QFtp::Ascii);
dateinamen.clear();
}
}
if (ftp->currentCommand() == QFtp::Put) {
(ftp->currentDevice())->close();
ftp->close();
}
if (ftp->currentCommand() == QFtp::Close) {
}
}//ftpCommandFinished
void addToList(const QUrlInfo &urlInfo)
{
dateinamen << urlInfo.name();
zaehler =zaehler+1;
}//addToList
void updateDataTransferProgress(qint64 readBytes, qint64 totalBytes)
{
progressBar->show();
progressBar->setMinimum(0);
progressBar->setMaximum(totalBytes);
progressBar->setValue(readBytes);
if(readBytes == totalBytes)
{
progressBar->hide();
}
}//updateDataTransferProgress
void loeschen( bool error ) {
if(QFile::remove(lineEdit_dateiname->text()+".txt"))
{
QMessageBox::information(this, tr("FTP"),
bla
);
}
pushButton_abfragen->setEnabled(true);
pushButton_beenden->setEnabled(true);
pushButton_upload->setEnabled(true);
pushButton_upload->setText(tr("Upload"));
} Gruß,
SuperSonik