Ваш вопрос немного сложен, поскольку в TCP не существует такой вещи, как «полные данные», поскольку TCP - это протокол stream , а не протокол дейтаграмма (в отличие отUDP).Это означает, что нет конкретного конца данных (если соединение не закрыто / сброшено).
Если вы работаете с протоколом прикладного уровня, который сегментирует поток TCP на сообщения размером (например, HTTP)), вы должны выполнить следующие шаги:
- Анализировать полезную нагрузку TCP и выяснить, насколько велико это текущее сообщение.
- Только тогда вы можете обрабатывать следующие пакеты / сегменты какони поступают в сетевой стек как продолжение того же сообщения.
- Наконец, после того, как все ожидаемые вами данные получены, вы можете собрать их и только затем использовать их на прикладном уровне.
Помните, что сеть работает в дейтаграммах , а TCP - это протокол stream .Поэтому вполне возможно, что во время обработки вашего первого сегмента остальные данные еще не поступили.Поэтому вы должны управлять десегментацией (дефрагментацией) над этим и будущими пакетами по этому конкретному потоку и только затем анализировать протоколы верхнего уровня.