Информация об изменениях

Сообщение Re[6]: Максимальная длина TCP пакета в сети от 10.02.2020 18:35

Изменено 10.02.2020 18:39 AlexGin

Re[6]: Максимальная длина TCP пакета в сети
Здравствуйте, уважаемый Pzz, Вы писали:

Pzz>Что-то одно из двух убрать, или длину, или маркер конца. С длиной приемник будет эффективнее работать: не надо будет сканировать каждый байт в поисках маркера.



Дело в том, что в Qt реализации TCP подсистемы имеет место генерация сигнала readyRead объектом типа QTcpSocket
в тот самый момент, когда фрагмент (или блок) данных поступил на приёмник от дальнего_конца.

Я подписываюсь (своим слотом) на вышеуказанный сигнал.
Когда данный сигнал успешно отработал, ко мне приходит массив байтов типа QByteArray (его общая длина — известна).

Этот массив — может представлять собой целый блок (ну то-есть пользовательский_пакет) или же только его фрагмент.
Я же проверяю не все байты, а только четыре_последних_байта на маркер конца:
— если его нет, то помещаю этот массив в "накопитель" жду недостающие фрагменты;
— если он есть — считаем что блок данных успешно принят — его можно применять.
Re[6]: Максимальная длина TCP пакета в сети
Здравствуйте, уважаемый Pzz, Вы писали:

Pzz>Что-то одно из двух убрать, или длину, или маркер конца. С длиной приемник будет эффективнее работать: не надо будет сканировать каждый байт в поисках маркера.



Дело в том, что в Qt реализации TCP подсистемы имеет место генерация сигнала readyRead объектом типа QTcpSocket
в тот самый момент, когда фрагмент (или блок) данных поступил на приёмник от дальнего_конца.

Я подписываюсь (своим слотом) на вышеуказанный сигнал.
Когда данный сигнал успешно отработал, ко мне приходит массив байтов типа QByteArray (его общая длина — известна).

Этот массив — может представлять собой целый блок (ну то-есть пользовательский_пакет) или же только его фрагмент.
Я же проверяю не все байты, а только четыре_последних_байта на маркер конца:
— если его нет, то помещаю этот массив в "накопитель" и жду недостающие фрагменты;
— если он есть — считаем что блок данных успешно принят — его можно применять.