2013-06-12 4 views
0

Я пытаюсь понять, как работает независимая от платформы связь, потому что я хотел бы разделить данные сокетов между сервером Java и некоторыми родными клиентами Unix и Windows. Сокеты независимы от платформы по дизайну, но представление данных связано с машиной, поэтому полезно, если данные TCP абстрагируют реальный формат данных, поскольку формат данных, поддерживаемый в одной системе, необязательно должен поддерживаться на другом ,Протокол для независимой от платформы связи сокетов

Например, если я хочу отправить значение unsigned int из клиентской программы C++ на сервер Java, я должен сообщить серверу, что этот номер следует интерпретировать как отрицательное целое число. Как работает этот вид абстракции? С моими ограниченными знаниями я просто отправлю номер в виде текста, а затем добавлю какую-то уникальную последовательность символов, которая сообщает получателю, какие данные он получил, но я не знаю, является ли это жизнеспособным подходом.

Чтобы быть немного более конкретным: Я хотел бы отправлять сообщения, которые содержат следующее содержание:

  1. В начале сообщения какого-то короткого сигнала или команды , так что приемник точно знает, что делать с данными, которые будут следовать.
  2. Затем некоторое текстовое содержимое произвольной длины.
  3. Далее следует номер, который может быть также текстовым, но должен быть интерпретирован отдельно.
  4. В конце может быть отметка, которая сообщает серверу, что сообщение заканчивается здесь.

TCP обрабатывает данные в байтовых кусках. Означает ли это, когда я пишу закодированный символ UTF-8 в одном байте, что этот символ интерпретируется одинаково на разных машинах, если клиентские машины принимают во внимание большой байтовый порядок байтов Java? Спасибо за любой вклад и помощь.

+2

JSON, protobuf. – ctn

+0

«Сокеты независимы от платформы по дизайну, но представление данных связано с машиной» <- только если вы выберете так! Просто выберите формат данных, который не имеет этой проблемы - как говорит @ctn, вы можете выбрать JSON или protobuf. Задача решена. – fge

+0

Протобуф был тем, о чем я думал, когда читал это. – dwxw

ответ

0

Розетки независимы, но не данные, передаваемые в (длина Types, порядок байтов, кодирование String, ...)

Посмотрите на Thrift, Protobuf или Avro если вы хотите отправить двоичные данные с перекрестными языков и кросс-платформенная функциональность

+0

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

Смежные вопросы