Это стандартный материал.
Для принимающей программы все, что приходит по сети - это просто поток байтов. Поток не имеет смысла помимо того, что приложение накладывает на него, точно так же, как файл не имеет значения, кроме того, как его записи, строки и т. Д. Определяются приложением (ями).
Единственный способ, которым клиент и сервер могут разобраться в потоке, - это установить соглашение или протокол, по которому они соглашаются.
Итак, некоторые распространенные способы сделать это:
- имеет разделитель, обозначающий конец сообщения (например, возврат каретки)
- передать поле длины, как в вашем примере, которое сообщает получателю, сколько данных содержит следующее сообщение.
- просто установите фиксированное соглашение (например, каждое сообщение будет составлять 20 байтов, или записи типа «A» будут в одном определенном формате, записи типа «B» - в другом ...)
- просто относитесь к нему как к потоку, не имея вообще никаких соглашений (например, возьмите все, что приходит по сети, и поместите его в файл без обращая внимания на то, что это такое)
Одним из преимуществ метода байтов длины является то, что получатель точно знает , сколько данных ожидать. С некоторыми дополнительными проверками работоспособности это может помочь устранить такие вещи, как переполнение буфера и тому подобное в вашем приложении.