Windows 中 Java 和 C 之间的任何 IPC 机制 - 不想要套接字

Posted

技术标签:

【中文标题】Windows 中 Java 和 C 之间的任何 IPC 机制 - 不想要套接字【英文标题】:Any IPC Mechanisms between Java and C in Windows - Dont want Sockets 【发布时间】:2012-06-29 10:47:26 【问题描述】:

我的要求是使用 JSON 字符串在 Windows 上的 C 客户端和 Java 服务器之间进行 IPC。

刚刚意识到我不能在 java 中的 Windows 中使用命名管道(“\.\pipe\filename”)。我不太热衷于使用任何基于网络的架构,因为它会变得更加复杂以确保安全性和速度。

请推荐您碰巧知道的任何共享内存/快速解决方案?

在此先感谢 :)

【问题讨论】:

您是否考虑过创建一个本地类来为您管理 IPC?如果您更喜欢命名管道,这应该很容易做到。 如果你想要速度,我很惊讶你正在使用 JSON。与使用 Sockets over loopback 相比,这会减慢您的速度。 您的问题基于不正确的前提。使用套接字并没有使确保安全性和速度变得更加复杂。套接字很可能是正确的解决方案。 为什么不能使用命名管道?您是尝试在同一台机器上连接还是在不同的机器上连接,管道的哪种模式失败? Ajay,它在同一台机器上。 Windows 中的命名管道存在于一个特殊的文件系统中,该文件系统只能由 Win32 API 使用,这对我来说很困难,因为我在一端使用 java。如果我错了,请纠正我。 【参考方案1】:

您可以在 Windows 上使用命名管道; this question 和 this question 的答案给出了不同的解决方案。

除此之外,通过使用 llvm(在您的情况下为 clang)和 LLJVM Translator,您可以将代码从数百种编程语言编译为 LLVM 字节码,然后将其转换为 JVM 字节码,此时您的现有的 Java 代码可以从您的(编译和翻译的)代码中调用函数。

最后但当然并非最不重要,为了避免做你可能不需要做的工作,你应该专注于使用清晰、可维护的代码来解决你的问题,并留下优化直到你确定它需要完成。届时,您的分析器将成为您测量瓶颈和验证您执行的优化的朋友。

【讨论】:

【参考方案2】:

IPC 可以使用 UDP 或 TCP。

如果您以后将程序移至其他操作系统,它也是一种非常便携的解决方案。

使用 TCP,很容易扩展系统:即:在不同的主机上运行程序。 由于 UDP 的不可靠特性,在不可靠的网络上使用它可能会有点困难。

【讨论】:

以上是关于Windows 中 Java 和 C 之间的任何 IPC 机制 - 不想要套接字的主要内容,如果未能解决你的问题,请参考以下文章

是否可以在 Windows 中的 PHP 和 C 之间共享内存?

在Windows中安装和切换java 7和java 8

C++和VisualC++有啥区别?

java实现FTP文件传输,linux之间,windows之间,以及windows和linux之间传输,实现代码是不是相同?

在 C 中的进程间通信中传递结构

在 windows mobile 上使用 C# 和 C 或 C++ 之间的区别