2015-01-12 2 views
0

Я исправляю использование сокетов для потоковой передачи последовательности байтов по сети. Я использую двоичный формат для сериализации объектов, которые я хочу отправить, а затем просто передавайте их между машинами и десериализуем их, когда они достигают цели. Вопрос был задан до того, как «как определить конец байта», но мое затруднительное положение несколько отличается. Я хочу иметь возможность отправлять несколько типов объектов в этой сети. Я бы просто использовал маркер или согласованную последовательность байтов, чтобы сообщить конец сообщения, но поскольку я понятия не имею, что будет генерировать бинарный формат, я не знаю, какую последовательность символов я мог бы использовать, которая была бы уникальной. Если я решил использовать последовательность 255, 128, 0, 255 для обозначения конца одного потока объектов, как я могу гарантировать, что эта последовательность не встречается также в двоичном формате? Что еще я могу сделать, чтобы обозначить конец одного объекта и начало другого?Надежно и окончательно обнаруживать конец потока сокетов

Спасибо за любую помощь.

+0

Вам необходимо создать обратную связь, если вы не можете контролировать содержимое своего сообщения. – CodeCaster

+0

Я знаю об этом, я спрашиваю, что я могу использовать для создания указанного контента, который я могу гарантировать, будет уникальным. – user2312610

ответ

1

Нормальный, это делается с указанием длины в начале сообщения.

Допустим, что вы сжимаете свои данные (которые могут быть изображением, текстом и т. Д.) В массив байтов. Вы берете длину этого байтового массива, скажем 500 и сохраняете этот номер в начале потока. Длина в байтах этого длина числа всегда должна быть такой же, так что позволяет сказать, 32 байт в случае числа 500, это будет выглядеть примерно так)

00000000 00000000 00000001 11110100 and after this the 500 bytes of your actualy message comes 

Таким образом, вы всегда знаете, как долго ваше сообщение от чтение первых 32 байтов и с тем, что вы знаете, когда сообщение заканчивается.

+0

Это действительно действительно красноречиво и очевидно, что я вижу это. Большое спасибо за то, что он так прост. :) – user2312610

+0

yep люди в 60-х, где умные :) – Vajura