2013-05-12 5 views
4

Мне нужно реализовать довольно простой сетевой протокол: есть устройство с микроконтроллером (язык C) и приложение Java, они должны общаться: мне нужно реализовать обновление прошивки и, возможно, некоторые другие вещи.Протокол передачи данных между различными платформами

По крайней мере, мне нужно передать некоторые структуры данных в виде заголовков.

только некрасиво способ приходит на ум:

я могу объявить упакованную структуру на стороне C, и обрабатывать как-то один и тот же поток данных на Java стороне. Итак, если моя структура изменена, мне нужно внести изменения с обеих сторон: C и Java. Мне это очень не нравится.

Есть ли лучший способ сделать это? Может быть, что-то вроде этого: я должен писать структуры протокола в каком-то специальном формате, а затем какая-то утилита может генерировать код для сторон C и Java.

Возможно, что-то другое.

Я был бы рад видеть предложения.

ответ

3

Возможно, вы захотите ознакомиться с использованием стандартизованной нотации для передачи данных, такой как JSON. Вот некоторая информация о разборе JSON в c.

Parsing JSON using C

Если бы это был мой проект, я, вероятно, будет идти только с упакованными структурами данных. Надеемся, что когда ваш проект созреет, изменения в структурах данных минимальны и происходят только во время основных выпусков. Вы можете сохранить тег версии в структуре данных для обработки устаревших форматов данных, если это необходимо.

+0

Спасибо за ответ. Мне нужно, чтобы мой загрузчик C был как можно более легким, поэтому JSON, похоже, не очень хороший способ. О теге версии: да, конечно, я сохраню его, если решит использовать этот путь. –

0

Не могли бы вы описать детали протокола? Является ли statefull или апатридом? Если ваш протокол не имеет гражданства, ознакомьтесь с веб-сервисами (особенно, REST-WS). Это хорошо известная практика межплатформенной коммуникации.

+0

Протокол не имеет гражданства, но мое электронное устройство не имеет доступа к World Wide Web, оно просто подключается к ПК через USB. Или я тебя неправильно понял? –

+0

Существует название «Сетевое» слово. Чаще всего сетевой протокол содержит роли клиента и сервера. Сервер может быть открыт только в локальной сети. Если вы общаетесь через USB, чем веб-сервис - это неправильное решение. – uzvar

+0

Извините за это, я думал, что могу назвать это «Сетевой протокол». Просто переименовал его в «Протокол передачи данных». –

3

Одним из распространенных решений этой проблемы является использование protobuf Google. Однако, поскольку вы указали, что вам нужно это для работы в среде микроконтроллера, я думаю, вы могли бы посмотреть на protobuf-c, что является чистой C-версией protobuf.

+0

Спасибо, это выглядит интересно! Я обязательно посмотрю. –

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