crossplatform.ru

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


  Ответ в Потеря данных по TCP
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
Tigr Дата 27.12.2010, 9:46
  Единственное толковое решение это добавлять к сообщению его длину. Если клиент получил не все данные, то ждет, пока сервер пришлет еще.
Вот классический пример:
        QDataStream in(tcpSocket);
        in.setVersion(QDataStream::Qt_4_0);

        if (blockSize == 0) {
            if (tcpSocket->bytesAvailable() < (int)sizeof(quint16))
                return;

            in >> blockSize;
        }

        if (tcpSocket->bytesAvailable() < blockSize)
            return;

        QString nextFortune;
        in >> nextFortune;

        if (nextFortune == currentFortune) {
            QTimer::singleShot(0, this, SLOT(requestNewFortune()));
            return;
        }

        currentFortune = nextFortune;
BRE Дата 26.11.2010, 12:57
  Ну так в примерах же посмотреть. :)
Tigr Дата 26.11.2010, 12:47
 
Цитата(BRE @ 26.11.2010, 12:41) *
Еще не успели дойти.

И как с этим бороться. Мне нужен цельный пакет. Необходимо также учитывать, что одновременно могут прийти несколько типов пакетов.
BRE Дата 26.11.2010, 12:41
  Еще не успели дойти.
Tigr Дата 26.11.2010, 12:39
  С сервера посылается сообщение:
QString str;
QByteArray block;
...
block.append(str);
write(block);

длина str=20946
К клиенту принимает:
QByteArray Str;
Str=tcpSocket.readAll();

Длина str=4380. Куда делись 16566 байтов? Или я где-то ошибся?
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 19.4.2024, 9:54