Java 应用程序和 C++ 应用程序之间的通信

Posted

技术标签:

【中文标题】Java 应用程序和 C++ 应用程序之间的通信【英文标题】:Communication between Java Application and C++ Application 【发布时间】:2012-03-09 06:17:26 【问题描述】:

我正在尝试为 Java 应用程序编写插件。该插件应该能够告诉 Java 应用程序新事件已被识别(观察者设计模式,轮询......这不是重点)。问题是事件是来自 Microsoft Kinect 控制器的跟踪手势(我使用 C++ 和 Microsoft Kinect SDK,因为我必须这样做)。这意味着我必须在 Java 应用程序和我的 Kinect 应用程序之间进行通信。 我想到了类似适配器设计模式的东西,其中 Java 应用程序“包含”接口(c++ 头文件、dll 等)。首先我想到了 JNI,但后来我必须编写一个 DLL 将在两个应用程序端使用,对吗?我想到的另一件事是通过像 UDP 之类的协议(或更轻量级的协议?)来提供手势数据。我听说的最后一件事是编写一个 COM+ 程序集……但老实说,我对 COM+ 的了解相当少。

JAVA APPLICATION << ----- ??? ----- >> KINECT APPLICATION

【问题讨论】:

【参考方案1】:

也许你应该看看谷歌的Protocol Buffers。

既然您正在考虑JNI。 我建议你参考这个IBM tutorial。

JNI 允许 java 应用程序调用 c/c++ 方法,反之亦然。

也看看这个 question,如果你是从 c++ 调用 java。

【讨论】:

【参考方案2】:

我发现了一些示例,例如 here、here 和 here,它们建议您使用共享内存结构或使用套接字。

我认为在这种情况下,让您的程序通过套接字进行通信将是最好的主意,因为您的应用程序不会那么紧密耦合,因此您只需要公开一个 IP、一个端口和一组命令。

根据this,似乎可以在 Kinect 上创建 C++ 服务器,但除此之外我不能说太多,因为我从未从事过 Kinect 相关项目。

【讨论】:

哦,当然......套接字!我要仔细看看。太棒了! 像魅力一样工作!我决定使用 UDP ... 看起来不错 ;) ... 谢谢! @SeveFriede:请记住,尽管速度更快,但 UDP 并不能保证包的交付。如果您决定让您的应用程序在更远的距离上通信,这可能会出现问题;) 谢谢提示!但目前整个事情都在本地机器上运行;)【参考方案3】:
JNI (Java Native Interface) allows the java application to call c/c++ 
methods.

All this requires that we have a means of communicating (Integrating Java 
with C++) between Java and C++. This is provided by the JNI (Java Native 
Interface).

For a practical example of using the JNI.

Calling native methods from Java see this url
https://www.javaworld.com/article/2077513/learn-java/java-tip-17--integrating-java-with-c--.html

【讨论】:

以上是关于Java 应用程序和 C++ 应用程序之间的通信的主要内容,如果未能解决你的问题,请参考以下文章

C++ 和 Java 对象通信

使用 Java 在服务器应用程序和 Matlab 客户端之间进行套接字通信

Java和C++进程之间的通信[重复]

java/spring 和 c++/qt 应用程序与 websockets 之间的通信

两个程序之间的输入输出通信

Metro 应用程序中 C++ 和 C# 之间的通信