Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Потеря данных по TCP
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt Ввод/Вывод, Сеть. Межпроцессное взаимодействие
Tigr
С сервера посылается сообщение:
QString str;
QByteArray block;
...
block.append(str);
write(block);

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

Длина str=4380. Куда делись 16566 байтов? Или я где-то ошибся?
BRE
Еще не успели дойти.
Tigr
Цитата(BRE @ 26.11.2010, 12:41) *
Еще не успели дойти.

И как с этим бороться. Мне нужен цельный пакет. Необходимо также учитывать, что одновременно могут прийти несколько типов пакетов.
BRE
Ну так в примерах же посмотреть. :)
Tigr
Единственное толковое решение это добавлять к сообщению его длину. Если клиент получил не все данные, то ждет, пока сервер пришлет еще.
Вот классический пример:
        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;
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2025 IPS, Inc.