crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Как правильно коннектить QFtp после дисконекта?, Соеденение с FTP после обрыва связи.
CMorgan
  опции профиля:
сообщение 27.7.2010, 11:46
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 1
Регистрация: 27.7.2010
Пользователь №: 1905

Спасибо сказали: 0 раз(а)




Репутация:   0  


Добрый день. Помогите пожалуйста, а то я слегка запутался ;) Пишу качалку данных с FTP. Не могу решить вопрос с восстановлением связи с FTP после обрыва связи (для тестирования тупо выдергиваю сетку из машины и втыкаю обратно).

Вот тут обработка изменения состояния. При отрубания инета исправно выдает QFtp::Unconnected и посылает сигнал Queue_not_emty()
void ION_Download::ftp_stateChanged( int state )
{
    switch ( (QFtp::State)state )
    {
        case QFtp::Unconnected:
            FTP_connected=false;
            if(files_to_download.size()>0)    emit Queue_not_emty();
            break;
        case QFtp::HostLookup:
            FTP_connected=false;
            break;
        case QFtp::Connecting:
            FTP_connected=false;
            break;
        case QFtp::Connected:
            FTP_connected=false;
            break;
        case QFtp::LoggedIn:
            FTP_connected=true;
            if(files_to_download.size()>0)    emit Queue_not_emty();
            break;
        case QFtp::Closing:
            FTP_connected=false;
            break;
    }
}


Который в свою очередь запускает:
int ION_Download::Run_downloading()
{
       ....

    if(!FTP_connected)
    {
        ui.INFOString->setText("Connecting");
        ConnectFTP();
        return 0;
    }
    
        ....
    return 1;
}


ConnectFTP() - выглядит так:
int ION_Download::ConnectFTP()
{
    
    
        if ( ftp->state() != QFtp::Unconnected ) ftp->close();

    
         QUrl url("ftp://blablabla:blablabla@192.168.0.3");
    
        ftp->connectToHost(url.host());

        if (!url.userName().isEmpty())
            ftp->login(QUrl::fromPercentEncoding(url.userName().toLatin1()), url.password());
        else
            ftp->login();

        
    return 0;
}


Слот связанный с завершением команды QFTP :
void ION_Download::ftpCommandFinished(int, bool error)
{

    if (ftp->currentCommand() == QFtp::ConnectToHost)
    {
        if (error)
        {

            ui.INFOString->setText("Connecting to remote FTP");
            ConnectFTP();
            return;
        }
        else
        {
            
        }
        
        return;
    }
    
    if (ftp->currentCommand() == QFtp::Login)
    {
        if(error)
        {}
        else
        {ftp->list();};
    }
    
    if (ftp->currentCommand() == QFtp::Get)
    {
        if (error)
        {
            file->close();
            file->remove();
            file_close_flag=false;
            delete file;
            No_File_on_FTP=true;
            emit Queue_not_emty();
        }
        else
        {
            file->close();
            file_close_flag=false;
            delete file;
            emit Queue_not_emty();
            
        }
    
    }  
    
    
    
}


Симптомы такие:

1)Если изначально интернета нету, но задание на скачку присутствует - прога постоянно пытается сделать ConnectFTP() (как и задумано) и при появление инета соединяется и закачивает все добро. Тут все работает как надо.

2) Если инет был, прога качала, потом он вдруг исчез. Отрабатывается ftp_stateChanged( int state ) с сигналом QFtp::Unconnected вызывается Run_downloading() и из нее ConnectFTP(), но после этого в void ION_Download::ftpCommandFinished(int, bool error) оно почему-то больше не приходит.

Что я делаю не так и как мне заставить QFTp пытаться сконнектится с ФТП обратно при неожиданном умирании инета?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 27.12.2024, 9:33