Как мне, как tcp-серверу, получить полный ответ от клиента?
TCP - это потоковый протокол, у которого нет внутренней границы сообщения.Это означает, что не существует такого понятия, как «полный ответ», если только у вас теперь нет длины вперед или у вас есть какой-то маркер для определения конца сообщения или сообщения заканчивается концом TCP-соединения.
... Протокол не определяет размер сообщения.
Таким образом, длина не известна заранее.Тогда вам понадобится своего рода маркер.
... но обычно это либо текст с переменной длиной, а иногда текст с переменной длиной и двоичные данные из файла, из которого включен размер
Нет четкого различия между двоичным и текстовым, так как двоичный просто означает, что байт может принимать любое значение, и поэтому текст также является своего рода двоичным.Поэтому вам нужен четкий маркер в конце текста (возможно, какой-нибудь символ \0
или новая строка).Также размер включен для двоичной части не ясно, как именно размер включен.Обычно используются разные варианты, например префикс фиксированного размера в виде двоичного файла (uint16, uint32 ...), шестнадцатеричное значение с новой строкой (как в кодированном кодировании HTTP), десятичное значение ...
Onceу вас есть четкое и однозначное определение того, как выглядит ваше сообщение, вы должны быть в состоянии реализовать это определение в вашем анализаторе сообщений.Поскольку ваше текущее описание не обеспечивает этой ясности, дальнейшая помощь не может быть оказана в реализации.