Java ‹-› C-мост

Я работаю над приложением с веб-интерфейсом Java, размещенным на сервере Glassfish, и ядром C, которое реализовано как демон Linux.

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

  1. Используйте Java Native Interface и сетевые сокеты для реализации RPC.
  2. D-Bus — насколько я знаю, DBus можно использовать для RPC между Java и C.

Я хочу использовать самый простой способ без использования внешних библиотек или фреймворков. Можно ли напрямую вызывать функции/методы между Java и C, используя только сокеты? Я использую ОС Centos.

Есть ли более элегантный способ соединить два языка?


person Peter Penzov    schedule 06.02.2012    source источник


Ответы (1)


Без внешних библиотек остаются только сокеты. Но я бы классифицировал DBus как внешнюю библиотеку, а вы?

Если программа C может использовать сокеты, нет необходимости в Java Native Interface. Код Java может открывать сокеты из Java, вызывая сокеты, которые слушает код C.

Если вы разрешаете DBus, возможно, вам следует рассмотреть множество сетевых протоколов и протоколов RPC, которые имеют библиотеки как для C, так и для Java. (Опять же, нет необходимости использовать JNI.)

При выборе DBus ознакомьтесь с документацией по Java и файлом руководство.

person Prof. Falken    schedule 06.02.2012
comment
Не могли бы вы дать дополнительную информацию, как это можно реализовать? - person Peter Penzov; 06.02.2012
comment
@user1103606 user1103606 Это довольно сложная тема, поэтому сложно дать на нее простой ответ. Знаете ли вы, как писать TCP-сокеты и методы вызова (например, используя отражение?) - person Peter Lawrey; 06.02.2012
comment
У меня есть знания, как написать сетевой сервер C и клиентскую программу. Не могли бы вы объяснить, как вызывать методы C из java, используя только сокеты? Что такое отражение? - person Peter Penzov; 06.02.2012
comment
Отражение в основном заключается в том, что вы можете спросить сервер о возможностях и методах, которые он экспортирует. Если вы можете писать серверный и клиентский код на C, то на Java это почти то же самое. - person Prof. Falken; 06.02.2012
comment
@user1103606 user1103606, поскольку вы знаете, как создавать серверы сокетов C, я добавил ссылку на то, как открывать сокеты из клиентов Java, Oracles Lesson 1. - person Prof. Falken; 06.02.2012
comment
Как я могу вызывать функции и методы C/Java, используя sockets. Не могли бы вы подробно объяснить мне, как работает RPC между разными языками программирования? - person Peter Penzov; 06.02.2012
comment
@ user1103606, нет прямого и простого способа просто вызывать функции между программами. Вы можете сделать это со сторонними библиотеками, но все они включают инкапсуляцию функций в протоколы. Ищите протокол Гессе, XML-RPC, ZeroC ICE, CORBA и так далее. - person Prof. Falken; 06.02.2012