Russian Qt Forum

Qt => Работа с сетью => Тема начата: besheniy.profesor от Апрель 22, 2010, 14:28



Название: Помогите реализовать докачку QNetworkAccessManager !!!!
Отправлено: besheniy.profesor от Апрель 22, 2010, 14:28
Помогите реализовать докачку файла с помощу QNetworkAccessManager
общую для всех протоколов ??? :'( ???


Название: Re: Помогите реализовать докачку QNetworkAccessManager !!!!
Отправлено: crossly от Апрель 22, 2010, 14:57
что значит общую для всех протоколов??


Название: Re: Помогите реализовать докачку QNetworkAccessManager !!!!
Отправлено: ecspertiza от Апрель 22, 2010, 14:59
Ну во первых начни с того что сам сделал и что не получается, а иначе это звучит как сделайте за меня :) Во вторых что то мне говорил что общую для всех протоколов не получится реализовать, скорее всего придется для каждого писать, но я могу и ошибаться.


Название: Re: Помогите реализовать докачку QNetworkAccessManager !!!!
Отправлено: besheniy.profesor от Апрель 27, 2010, 14:12
Код:
void DownloadManager::startDownload()
{
    if (downloadUrl.isEmpty())
    {        emit errordownload(1);
        return;
    }
    output.setFileName(filename);
    if (!output.open(QIODevice::WriteOnly))
    {
        emit errordownload(2);
        return;           
    }
    QNetworkRequest request(downloadUrl);
    currentDownload = manager.get(request);
    currentDownload->setReadBufferSize(100*1024);
    this->downloadTimer = new QTimer(this);
    this->downloadTimer->start(1000);
    connect(currentDownload, SIGNAL(finished()),SLOT(downloadFinished()));
    connect(downloadTimer, SIGNAL(timeout()),SLOT(downloadReadyRead()));
}
void DownloadManager::downloadReadyRead()
{   
    output.write(currentDownload->readAll());
   
}

Я должен реализовать докачку файлов по протоколам HTTP и FTP с помощью класса QNetworkAccessManager


Название: Re: Помогите реализовать докачку QNetworkAccessManager !!!!
Отправлено: crossly от Апрель 27, 2010, 15:30
настоятельно рекомендую прочитать вот это http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html (http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html) и вот это http://tools.ietf.org/html/rfc959 (http://tools.ietf.org/html/rfc959) .... исходя из первого можно реализовать докачку для HTTP с помощью Range ... у FTP протокола есть своя команда REST... для http сделать указав Range в хидере.. для ftp так не получится....так что удачи....


Название: Re: Помогите реализовать докачку QNetworkAccessManager !!!!
Отправлено: ecspertiza от Апрель 27, 2010, 18:19
Да, и кодец странноват, в общем в случае с http тебе придется обмениваться заголовками с сервером ,crossly, скинул хорошие ссылки, от себя добавлю вот -> http://ru.wikipedia.org/wiki/HTTP , там все подробно про Http расписано, в случае с ftp тоже видимо обмениваться командами ,вот список команд -> http://ru.wikipedia.org/wiki/FTP

REST [С_КАКОГО_БАЙТА_ПРОДОЛЖИТЬ]
RETR [ИМЯ_ФАЙЛА]

Дерзай.


Название: Re: Помогите реализовать докачку QNetworkAccessManager !!!!
Отправлено: besheniy.profesor от Май 10, 2010, 14:13
Код:
QNetworkRequest request(QUrl("http://127.0.0.1/Video/Films/Fytyrama-Igra-Bendera-www.Rouminga.Ru.avi"));
request.setRawHeader("Range","bytes=502400000");
Код сработал на ура ! Спасибо!!!!
А вот  этот не работает
Код:
QNetworkRequest request(QUrl("ftp://127.0.0.1/Video/Films/Fytyrama-Igra-Bendera-www.Rouminga.Ru.avi"));
request.setRawHeader("REST","502400000");
Может я што-то не то делаю??
Или лудше QFtp?

 


Название: Re: Помогите реализовать докачку QNetworkAccessManager !!!!
Отправлено: ecspertiza от Май 10, 2010, 16:57
Я конечно не уверен, но попробуй вот так
Код:
QNetworkRequest request(QUrl("ftp://127.0.0.1/Video/Films/"));
request.setRawHeader("REST","502400000");
request.setRawHeader("RETR","Fytyrama-Igra-Bendera-www.Rouminga.Ru.avi");


Название: Re: Помогите реализовать докачку QNetworkAccessManager !!!!
Отправлено: besheniy.profesor от Май 11, 2010, 00:30
Не работает!! пробовал!


Название: Re: Помогите реализовать докачку QNetworkAccessManager !!!!
Отправлено: crossly от Май 11, 2010, 13:33
ну я же сразу сказал.... что докачку фтп с помощью QNetworkAccessManager не получится реализовать... этот изначально заточен на работу с HTTP... для ftp используй QFtp...


Название: Re: Помогите реализовать докачку QNetworkAccessManager !!!!
Отправлено: thechicho от Февраль 12, 2012, 12:54
если схема ftp:// , то qnam будет работать по этому протоколу. можно загрузить, скачать файл. докачка не прокатит с ним, т.к. надо команды отправлять. используй int QFtp::rawCommand ( const QString & command )