Название: [Решено] Синхронная работа Отправлено: kobra от Июль 17, 2012, 01:12 Сейчас прохожу кур по криптографии со Стенфорда и там есть одна задачка.
Нужно все время проверять что сервер отвечает на различние параметри в url. Ответ или 403 или 404. Как с помощью Qt можна получить код ошибки, причем моя програма должна остановиться и ждать ответа. Читал хелп то там рнашел не очень понятний пример для ассинхронной работи и также в классе QNetworkReply не нашел кодом ошибок 403 и 404 Название: Re: Синхронная работа Отправлено: Bepec от Июль 17, 2012, 06:50 Как бы сказать - сервер вам наверно в ответ формирует страницу, на которой отображен номер ошибки и её описание. Вам всего-то надо ей прочитать.
Название: Re: Синхронная работа Отправлено: LisandreL от Июль 17, 2012, 07:06 Заголовки должны быть соответствующие.
Типа: Код
Название: Re: Синхронная работа Отправлено: QtCoder от Июль 17, 2012, 07:12 NetworkError QNetworkReply::error () const
QNetworkReply::ContentNotFoundError 203 the remote content was not found at the server (similar to HTTP error 404) Название: Re: Синхронная работа Отправлено: SimpleSunny от Июль 17, 2012, 23:31 QVariant QNetworkReply::attribute ( QNetworkRequest::Attribute code ) const
QNetworkRequest::HttpStatusCodeAttribute Название: Re: Синхронная работа Отправлено: kobra от Июль 20, 2012, 18:01 Что-то у меня не получаеться сделать правильно...
Написал класс у которого в одном из методов есть следующей код: Код: QNetworkRequest request; В основном код переписал из документации. В консоль печатаеться следующей линк: http://crypto-class.appspot.com/po?er=0000000000000000000000000000000158b1ffb4210a580f748b4ac714c001bd не трудно проверить что он введет на страницу с ошибкой 403. в слоте slotError(QNetworkReply::NetworkError) переменную gettedError я устанавливаю в true. в результате программа зависает. Название: Re: Синхронная работа Отправлено: mutineer от Июль 21, 2012, 11:50 А каким образом должен выполниться slotError, если поток выполнения застрял на while(!gettedError); ?
Название: Re: Синхронная работа Отправлено: kobra от Июль 21, 2012, 13:22 а что я должен сделать чтоб он выполнился?
просто остановить свой главный поток и ждать или нужно вызвать какой нибудь метод? Название: Re: Синхронная работа Отправлено: mutineer от Июль 21, 2012, 20:18 а что я должен сделать чтоб он выполнился? Почему бы нужный код не выполнить прям в slotError? и не мутить это странное ожидание.просто остановить свой главный поток и ждать или нужно вызвать какой нибудь метод? Название: Re: Синхронная работа Отправлено: kobra от Июль 21, 2012, 20:31 поставил return все работает
а нельзя сделать так чтоб программа просто ждала ответа, а потом вернулась к тому места где остановилась? Название: Re: Синхронная работа Отправлено: mutineer от Июль 21, 2012, 20:34 Запустить локальный евент-луп, а при приходе ответа вызвать ему exit()
З.Ы. фиг знает куда ты return поставил и что у тебя заработало Название: Re: Синхронная работа Отправлено: kobra от Июль 21, 2012, 22:31 работает значит что вызываеться слот slotError и выводит в консоль номер ошибки
у меня есть метод который в цикле должен делать запросы к серверу чтоб все заработало мне пришлось поставить return который останавливает метод. в результате счас мне придеться шаманить чтоб все переделать, а хотелось б чтоб моя программа просто остановилась и ждала ответа, а потом продолжила работу в цикле Название: Re: Синхронная работа Отправлено: mutineer от Июль 21, 2012, 22:58 работает значит что вызываеться слот slotError и выводит в консоль номер ошибки у меня есть метод который в цикле должен делать запросы к серверу чтоб все заработало мне пришлось поставить return который останавливает метод. в результате счас мне придеться шаманить чтоб все переделать, а хотелось б чтоб моя программа просто остановилась и ждала ответа, а потом продолжила работу в цикле Код будет понятнее этих маханий руками в воздухе Название: Re: Синхронная работа Отправлено: kobra от Июль 22, 2012, 01:43 Код: void Crypto::run() Оставил только основное. Еще раз задача. Есть три блока в каждом по 16 байт. Нам нужно их всех разгадать. Каждый байт разгадываем следующем путем: мы предполагаем что наш байт равен x, далее на основе нашего предположения строим адрес страницы. Если угадали то в ответ получаем 404, иначе 403. Тойсть мне в худшем случае нужно 3 * 16 * 256 = 12288 запросов. Название: Re: Синхронная работа Отправлено: mutineer от Июль 22, 2012, 10:04 можешь вместо while(!gettedError); запустить локальный eventLoop и вместо gettedError = true; делать из него exit
Название: Re: Синхронная работа Отправлено: kobra от Июль 22, 2012, 13:57 спасибо как раз то что мне нужно
Название: Re: [Решено] Синхронная работа Отправлено: mutineer от Июль 22, 2012, 15:14 А чем не устроило когда я первый раз это решение называл?
|