Russian Qt Forum
Ноябрь 23, 2024, 07:59 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 [2]   Вниз
  Печать  
Автор Тема: QNetworkAccessManager и параметр Nonce [РЕШЕНО]  (Прочитано 13818 раз)
IGHOR
Крякер
****
Offline Offline

Сообщений: 390



Просмотр профиля WWW
« Ответ #15 : Июль 13, 2013, 21:07 »

Код:
	int currentLineDataType=0;
while(socketSender->bytesAvailable())
{
static QByteArray currentLine;
currentLine=socketSender->readLine();

if(currentLine.isEmpty())continue;
if(currentLine.startsWith("HTTP/1"))
{
if(!buffer.isEmpty())buffer.clear();
currentLineDataType=1;
endOfPacket=false;
continue;
}

switch(currentLineDataType)
{
case 0:
if(nextPacketMastBeSize&&currentLine.size()>1&&currentLine.size()<=8&&currentLine.right(2)=="\r\n")
{
currentLine.remove(currentLine.size()-2,2);
quint16 currentChunkSize=currentLine.toUShort(0,16);
if(currentChunkSize==0)endOfPacket=true;
else packetChunkSize+=currentChunkSize;
nextPacketMastBeSize=false;
break;
}
else
{
if(currentLine.size()>1&&currentLine.right(2)=="\r\n")
{
currentLine.remove(currentLine.size()-2,2);
nextPacketMastBeSize=true;
}
buffer.append(currentLine);
}
break;
case 1:
if(currentLine.endsWith("chunked")){packetIsChunked=true;break;}
if(currentLine!="\r\n")break;
currentLineDataType=0;
nextPacketMastBeSize=true;
break;
}
if(endOfPacket)
{
if(packetChunkSize<buffer.size())buffer.remove(0,buffer.size()-packetChunkSize);

emit dataReceived(buffer);

sendPendingData();
}
}
« Последнее редактирование: Июль 15, 2013, 14:15 от IGHOR » Записан
IGHOR
Крякер
****
Offline Offline

Сообщений: 390



Просмотр профиля WWW
« Ответ #16 : Июль 15, 2013, 14:47 »

Остался еще вопрос. Есть ли еще какой-то идентификатор пакета QSslSocket чтобы знать что тот что отправлен был получен.
Например отправляю пакеты и по очереди получаю ответы:
1,2,3
А отправил 4 пакет и вышел таймаут, отсылаю следующий пакет номер 5, и тут внезапно приходит ответ от 4 пакета.
Можно ли задать пакету id или есть другие варианты решения проблемы?
Записан
thechicho
Гость
« Ответ #17 : Июль 15, 2013, 16:18 »

не отсылать пакет 5, пока не придет ответ от 4 пакета?
Записан
IGHOR
Крякер
****
Offline Offline

Сообщений: 390



Просмотр профиля WWW
« Ответ #18 : Июль 15, 2013, 16:46 »

не отсылать пакет 5, пока не придет ответ от 4 пакета?
Ну это так и работает. Но выходит таймаут, например 5 секунд. И шлю следующий пакет.
А после этого приходит 4.
Делать abort и опять connect это слишком долго.
Записан
thechicho
Гость
« Ответ #19 : Июль 15, 2013, 17:13 »

имелось в виду увеличить таймаут, раз обязательно условие очередности прихода пакетов на сервер.
либо, отсылать 5 пакет сразу за 4ым или через какой-то промежуток времени, не дожидаясь ответа от 4ого. так сделать, если есть уверенность, что 4ый пакет 100500 дойдет до сервера и 5ый пакет никак не сможет его обогнать (я хз как работают сокеты, но вроде как позже ушел, позже должен прийти)
или еще как-нибудь Улыбающийся
Записан
IGHOR
Крякер
****
Offline Offline

Сообщений: 390



Просмотр профиля WWW
« Ответ #20 : Июль 15, 2013, 18:26 »

Там некоторые пакеты обязательны к получению, а некоторые не важные можно проигнорировать.
И надо сделать так чтобы важный пакет сразу отправлялся, а не ждал 5 секунд на ответ не важного.
В общем буду думать об оптимизации Улыбающийся
Записан
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.057 секунд. Запросов: 22.