crossplatform.ru

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


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

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
Теги
Выровнять по центру
Ссылка на тему
Ссылка на сообщение
Скрытый текст
Сокращение
Код с подсветкой
Offtopic
 
Удалить форматирование
Спец. элементы
Шрифт
Размер
 
Цвет шрифта
 
Отменить ввод
Вернуть ввод
Полужирный
Курсив
Подчеркнутый
 
 
Смайлики
Вставить изображение
Вставить адрес электронной почты
Цитата
Код
Раскрывающийся текст
 
Увеличить отступ
По левому краю
По центру
По правому краю
Вставить список
Вставить список

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


Последние 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 Рейтинг@Mail.ru Текстовая версия Сейчас: 4.7.2025, 22:56