Simple ftp file transfer reconnect problem?



  • Hello,
    i write an small prg that transfer an file via ftp.
    i test the prg and get following error,
    if the username wrong first transfer get an user or password error 204,
    thats okay, if i retry the transfer with the same settings i get an timeout.

    why?

    @#include "include/Protocol/Ftp.h"
    #include "include/ConfigFile/ConfigFile.h"
    #include "include/Defines/Global.h"

    #include <QUrl>
    #include <QNetworkAccessManager>
    #include <QFile>
    #include <QApplication>

    Ftp::Ftp(ConfigFile &config, QWidget *parent) :
    QWidget(parent), cf(config), reply(NULL)
    {
    manager = new QNetworkAccessManager(0);
    connecttimer.setInterval(FTP_CONNECT_TIMEOUT);
    connect(&connecttimer, SIGNAL(timeout()), this, SLOT(CheckConnection()));

    }

    void Ftp::GetFile(void)
    {
    if(!reply)
    {
    reply = manager->get(QNetworkRequest(QUrl("ftp://" +cf.GetftpUsername() +":" +cf.GetftpPassword() +"@" +cf.GetServerAddress().toString() +":" +QString::number(cf.GetftpPort()) +"/" +cf.GetProgramName() +OS_PRG_EXT)));
    qDebug() << "#########" << "reply == NULL" << "#########";
    connect(reply, SIGNAL(downloadProgress(qint64,qint64)), this, SLOT(downloadinProgress(qint64,qint64)));
    connect(reply, SIGNAL(finished()), this, SLOT(replyfinished()));
    connect(reply, SIGNAL(readyRead()), this, SLOT(slotReadyRead()));
    connect(reply, SIGNAL(error(QNetworkReply::NetworkError)), this, SLOT(slotError(QNetworkReply::NetworkError)));
    }

    connecttimer.start();
    
    #if DEBUG_LEVEL_FTP > LOG_ERRORS
         qDebug() << this->metaObject()->className() << "FTP: GetFile ";
    #endif
    

    }

    void Ftp::CheckConnection(void)
    {
    #if DEBUG_LEVEL_FTP > LOG_ERRORS
    qDebug() << this->metaObject()->className() << "CheckConnection";
    #endif

    connecttimer.stop();
    reply->disconnect();
    
    if(reply)
    {
        if(reply->isFinished())
        {
            replyfinished();
            emit DownloadFinished(reply->error());
    
                emit StatusUpdate("No error");
        }
        else
        {
            qDebug() << "reply->isFinished() " << reply->isFinished();
            emit DownloadFinished(QNetworkReply::TimeoutError);
            emit StatusUpdate("the connection to the remote server timed out");
        }
    }
    reply->deleteLater();
    reply = NULL;
    

    }

    void Ftp::downloadinProgress(qint64 bytesReceived, qint64 bytesTotal)
    {
    #if DEBUG_LEVEL_FTP > LOG_ERRORS
    qDebug() << this->metaObject()->className() << "downloadinProgress " << "bytesReceived " << bytesReceived << "bytesTotal " << bytesTotal;
    #endif

    connecttimer.start();
    

    }

    void Ftp::slotReadyRead(void)
    {
    #if DEBUG_LEVEL_FTP > LOG_ERRORS
    qDebug() << this->metaObject()->className() << "slotReadyRead";
    #endif

    connecttimer.start();
    

    }

    void Ftp::replyfinished()
    {
    connecttimer.stop();

    #if DEBUG_LEVEL_FTP > LOG_ERRORS
         qDebug() << this->metaObject()->className() <<"replyfinished ";
    #endif
    if(reply)
    {
        #if DEBUG_LEVEL_FTP > LOG_ERRORS
            qDebug() << this->metaObject()->className() << "if reply ";
        #endif
        if(reply->bytesAvailable())
        {
            QFile file&#40;QApplication::applicationDirPath(&#41; +"/" + cf.GetProgramName() + TEMP_FILENAME_EXT);
            file.open(QIODevice::WriteOnly);
    
            #if DEBUG_LEVEL_FTP > LOG_ERRORS
                 qDebug() << this->metaObject()->className() << "file write: " << file.write(reply->readAll());
            #endif
    
            file.close();
        }
        emit DownloadFinished(reply->error());
        qDebug() << reply->errorString()<< " reply->error() " << reply->error();
        if(reply->error() == 0)
            emit StatusUpdate("No error");
        else
            emit StatusUpdate(reply->errorString());
    }
    else
    {
        emit DownloadFinished(QNetworkReply::TimeoutError);
        emit StatusUpdate("the connection to the remote server timed out");
    }
    reply->deleteLater();
    reply = NULL;
    

    }

    void Ftp::slotError(QNetworkReply::NetworkError error)
    {

    #if DEBUG_LEVEL_FTP > LOG_NOTHING
         qDebug() << this->metaObject()->className() <<"slotError: " << error;
    #endif
    
    if(error)
    {
        connecttimer.stop();
        emit DownloadFinished(reply->error());
        emit StatusUpdate(reply->errorString());
        reply->deleteLater();
        reply = NULL;
    }
    

    }

    @


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.