簡體   English   中英

Qt QNetworkAccessManager長時間延遲發出完成的信號

[英]Qt QNetworkAccessManager long delay to emit finished signal

我使用QNAM使用ftp協議處理上傳。 整個過程都可以,但是我有一個奇怪的行為:

這是我的方法:

void ftp::uploadFile(const QString &origin, const QString &destination)
{
    QUrl url("ftp://"+host+""+destination);
    url.setUserName(user);
    url.setPassword(pwd);
    url.setPort(21);

    localFile = new QFile(origin, this);
    if (localFile->open(QIODevice::ReadOnly))
    {
         reply = nam->put(QNetworkRequest(url), localFile);
         QObject::connect(reply, SIGNAL(uploadProgress(qint64, qint64)), SLOT(transferProgress(qint64, qint64)));        
         QObject::connect(reply, SIGNAL(finished()), this, SLOT(transferFinished()));
    }
    else qDebug() << localFile->errorString();
}

當我上傳文件時,將發出uploadProgress:

qDebug() << sent << "/" << total;

輸出0 / x直到x / x為止。 然后需要很長時間,可能花費20秒才能發出完成的信號。 為什么要這樣延誤?

我嘗試忽略完成的信號,並在進度為sent==total自己發出信號 ,但另一端文件損壞。 (它並沒有真正損壞,因為我只發送jpg,生成的文件是上半部分的jpg。很大一部分只是灰色。)

我想為我的用戶提供一個進度條,其中100%確實表示該過程已完成。 上傳5秒鍾,然后以100%的速度停留20秒鍾並不是很好。

文件上載會在后台進行一些緩沖(qt套接字緩沖區,系統套接字緩沖區,網絡緩沖區),因此“進度”信號僅表示您將數據發送到某個地方,而該服務器也未收到它。 當所有傳輸到遠程側和緩沖區的數據均被刷新時,將發出“完成”信號。 如果您需要知道傳輸的確切大小,則可以尋找禁用請求或套接字或qnam緩沖/緩存的方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM