Пробую принять на сервере фрагментированное сообщение.
Клиент отсылает в формате:
длина_данных + данные
клиент:
QByteArray block;
QDataStream out(&block, QIODevice::WriteOnly);
out.setVersion(QDataStream::Qt_4_4);
out << (quint64)0; // reserve for msg len
out << (qreal)version; //write protocol version:
out << outgoingBuffer;
out.device()->seek(0);
out << (quint64)(block.size() - sizeof(quint64));
sslSocket->write(block);
прием на сервере слот readData:
void ConnectionThread::readData()
{
QDataStream in(sslSocket);
in.setVersion(QDataStream::Qt_4_4);
quint64 byteCount = 0;
qreal version = 0;
while(sslSocket->isValid() && byteCount < sizeof(quint64))
{
sslSocket->waitForReadyRead(100);
byteCount = sslSocket->bytesAvailable();
if (workaround>300) {
return;
}
else workaround++;
}
in >> blockSize;
workaround = 0;
while(sslSocket->isValid() && byteCount < blockSize)
{
sslSocket->waitForReadyRead(100);
byteCount = sslSocket->bytesAvailable();
if (workaround>300) {
return;
}
else workaround++;
}
//read protocol version
in >> version;
// read message
in >> incomingBuffer;
// обработка данных
Так вот когда приходит первая часть фрагментированного сообщения, я получаю размер данных, и пробую подождать когда придут остальные данные waitForReadyRead(100), но получаю ошибку "Network operation timed out". Потом, когда происходит выход с ф-и readData через workaround, я снова попадаю в readData, видимо readyRead() сигнал был вызван... Как мне правильно поступить и получить все данные в середине слота?