IPC между приложениями Java и C - PullRequest
3 голосов
/ 05 мая 2011

У меня есть 2 приложения, одно из которых написано на C, а другое на Java, которые должны работать на одной машине.Каков наилучший способ реализации IPC между ними?

лучшее значение переносимости, минимальная осведомленность пользователя (всплывающие окна брандмауэра ...) и т. Д.

Ответы [ 4 ]

4 голосов
/ 05 мая 2011

Я бы использовал Sockets over loop back для начала.Это позволяет вам отправлять текстовые или двоичные данные и аккуратно обрабатывать, когда один процесс запускается или умирает.Задержка составляет около 20-50 микросекунд в зависимости от того, что вы делаете с данными и сколько вы отправляете.

Сокеты не зависят от платформы и могут использоваться в чистой Java.Для Java доступны миллионы примеров и учебных пособий.

1 голос
/ 05 мая 2011

Я обнаружил, что самый простой подход - выполнить нативную программу из Java, а затем обмениваться данными через потоки ввода и вывода процесса.Это работает только для связи ASCII, что в большинстве случаев нормально.Этот подход работает на разных платформах.Если приложения запускаются независимо друг от друга, то файлы или сокеты являются кроссплатформенными и при желании будут работать с двоичными данными.

Всегда есть JNI или JNA, но обычно они лучше всего подходят для тесной связи между Java и нативным кодом.

0 голосов
/ 02 мая 2012

Я никогда не пробовал, но в Java есть поддержка отображаемых в память файлов http://docs.oracle.com/javase/1.4.2/docs/api/java/nio/MappedByteBuffer.html, которые позволили бы вам обмениваться объектами между приложениями C и Java.Синхронизация доступа может быть сложной, потому что я не думаю, что у Java есть прямой доступ к примитивам синхронизации IPC на уровне ОС.

0 голосов
/ 05 мая 2011

Для этой цели вы можете использовать либо именованные сокеты, либо сетевые сокеты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...