QT 防止FTP 上传软件在断连处 Crash

Posted hasan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了QT 防止FTP 上传软件在断连处 Crash相关的知识,希望对你有一定的参考价值。

前段时间发现项目中的上传FTP软件有可能会在从服务器申请断连时Crash, 所以加了一个Timer。

由于项目代码行数过大, 此处上传部分代码片段。

    timeoutTimer = new QTimer();
    connect(timeoutTimer, SIGNAL(timeout()), this, SLOT(doTimeout()));
    timeoutTimer->setInterval(4000);
    case QFtp::Closing:
        // The connection is closing down, but it is not yet closed. (The state will be Unconnected when the connection is closed.)
        pMain->debug( "Status(%d) = disconnecting from HOST", type );
        timeoutTimer->start();
        break;
    case QFtp::Unconnected:
        // There is no connection to the host.
        pMain->debug( "Status(%d) = disconnected status", type );
        if ( communicator->isPerforming() ) {
            communicator->abortRequest();   // abort performing command, maybe done(ERROR) should be called later
        }
        timeoutTimer->stop(); //stop timer
        break;
/** 
 *@projectName   BoeB9Project  
 *@author        Hasan 
 **/ 
void FtpHelper::doTimeout()
{
    pMain->debug("debug154545 timeout !!!!!!!");
    pMain->sendProxyMessage("MesUPLOADTimeout", ProxyMessage::Notify);
    timeoutTimer->stop();
}

在此进程发出MesUPLOADTimeout 信息之后, 项目主进程会从代理Proxy中接受此信息并进行处理。

/**
 *@projectName   BoeB9Project
 *@author        Hasan
 **/
void BoeB9QtmCellInlineMain::restartUploader()
{
    QProcess proc;
    QString c = "taskkill /im uploader.exe /f";
    proc.execute(c);
    proc.close();

    info("********info terminate uploader");

    QProcess *proc1 = new QProcess(this);

    proc1->start("cmd.exe", QStringList() <<"/c" << "c:///ORBKwsmcu/bin/start_uploader.bat");


    delete proc1;

    info("********info start uploader again");
}

主进程重启上传软件,从而跳过断连。

以上是关于QT 防止FTP 上传软件在断连处 Crash的主要内容,如果未能解决你的问题,请参考以下文章

iOS Crash上传

使用 ajax 获取通过 FTP 上传的文件的文件大小 - 试图防止 ajax 中断自身

ftp上传软件,有没有好用的ftp上传软件,ftp上传软件教程

windowslinux通过ftp从ftp服务器上传和下载

qt5集成libcurl实现tftp和ftp的方法之二:实现tftp文件上传和下载

使用 WinSCP .NET 程序集防止通过 FTP 传输不完整的文件