【问题标题】:communicating Java application and C++ process using posix ipc message queues使用 posix ipc 消息队列通信 Java 应用程序和 C++ 进程
【发布时间】:2012-08-05 21:56:45
【问题描述】:

我很难解释我需要实现什么,所以我真的希望我能够做到。

我有一个 C 进程,它使用 ipc 消息队列来发送和接收数据。我还有一个 Java 应用程序需要向该 C 进程发送和接收消息,因此它需要访问该队列。

我一直在寻找一种方法来做到这一点,我认为 JNA(java natice 访问)可能是一个解决方案。问题是,显然,我需要一个 DLL,以便映射和使用我需要的方法(msgget、msgsnd、msgrcv、msgctl),但我不知道应该加载哪个 DLL。我对此很陌生,所以我感到迷茫。

还有其他方法可以让这两个应用程序使用消息队列进行通信吗?还是 JNA 是一个很好的解决方案,我只需要找到正确的 DLL 来加载?

提前致谢。

【问题讨论】:

  • 它与 C 进程必须加载的 DLL 相同。 (最好是完全相同的 DLL)我会假设它是 Windows 的一部分。
  • 首先,感谢您的帮助。问题是我不确定是否理解。要在 C 程序中使用这些方法,我只需要包含“sys/ipc.h”和“sys/msg.h”,但我不知道这些头文件是否是 DLL 的一部分(我没有使用 DLL直到现在)或者,就像 victorsavu3 所说,我将不得不使用 JNI,因为它们只是包装器。
  • 无论哪种方式,您都使用相同的 DLL。恕我直言,在这种情况下使用 JNI 可能会更容易,而且肯定会更快,我认为这是使用 IPC 的一部分。
  • 再搜索一下,我发现了这个“en.wikipedia.org/wiki/C_POSIX_library”。由于包含出现在列表中,我开始了一个加载 C POSIX 库的非常小的示例。现在我有一个错误,但我会稍后发布。再次感谢。

标签: java c++ ipc


【解决方案1】:

如果这是一个选项,您可以更改 C 进程以使用不同的通信方式。根据我的经验,套接字是 c 和 java 程序/进程之间最不麻烦的通信方式。

【讨论】:

  • 感谢您的回答。问题是我无法更改消息队列并使用套接字。至少,现在不是。
【解决方案2】:

如果你能找到depend.exe(我知道VS 2005 有),它可以显示每个dll 导出的函数。在您的 c 程序上运行它以查看函数的来源,如果它们是真实的,您可以使用 JNA。这些函数实际上可能只是包装器,如果是这样,您需要使用 JNI

【讨论】:

    【解决方案3】:

    使用 JNA 是完全合法的,但有点棘手。

    这篇文章“Java POSIX IPC”可能提供一些关于如何在 Java 中或使用 Java 库中执行此操作的线索。

    【讨论】:

    • 感谢您的回答。我今天早上在寻找答案时找到了bmsi.com/java/posix,但这似乎是一个废弃的项目,不是吗?我的意思是,上一次更新是在 3 年前,这就是我害怕尝试使用它的原因。
    猜你喜欢
    • 2020-06-11
    • 2013-04-16
    • 2020-10-30
    • 2013-11-01
    • 2014-08-12
    • 1970-01-01
    • 2015-06-02
    • 2019-11-29
    • 2016-04-03
    相关资源
    最近更新 更多