如何在 .NET 和 Java 之间创建跨平台进程间通信?

Posted

技术标签:

【中文标题】如何在 .NET 和 Java 之间创建跨平台进程间通信?【英文标题】:How could I create a cross platform interprocess communication between .NET and Java? 【发布时间】:2010-10-28 09:33:17 【问题描述】:

我想开发某个插件/扩展,它需要在 eclipse 中运行并且必须与另一个(java)插件集成,但它必须从 .NET 程序集中收集数据(使用mono's cecil)。

所以我的问题是我应该如何在 Java 代码和 .NET 之间建立这种关系? 我知道我可以使用 mono 在例如 Linux 上运行 .net 应用程序,但是我有两个问题,我希望 Java 插件启动 .NET 应用程序,第二个问题是如何让 Java 插件进行某些调用到 .NET 应用程序。

对于这两个应用程序之间的这种通信,我希望独立于平台,以便相同的二进制文件可以在 Windows、OSX 和 Linux 中运行。另一个可能很重要的事实是调用的结果可能包含相当大的对象集合。

或者也许在 java 中托管一个 .NET 程序集并直接调用它会更好/可能?

更新: 我认为一个理想的答案可以解决以下问题:

如何从 Java 端启动/调用 .NET 程序集/应用程序。 (跨平台) 如何与 .NET 程序集通信 这些选择对可修改性有什么影响

【问题讨论】:

【参考方案1】:

应用程序之间的通信。

如何让 java 应用程序与 .net 应用程序通信

交通

如何在 java 和 .net 应用程序之间传输信息。

套接字 - 连接可以保持打开状态,双方都可以发送内容(= 充当客户端) WebServices - 没有保持打开的连接,事件处理不能很好地工作

序列化

如何将物体转换成易于运输的东西。

纯 XML - 易于上手。 java 和 .net 都有很好的 XML 支持 SOAP - 如果您想公开一个供所有人使用的 API,那就太好了。有点复杂。 Protobof - Google 的序列化协议。存在许多不同的实现。 自定义二进制序列化 - 构建您自己的序列化库

如何从 java 加载 .net 程序集

以单声道运行 java 应用程序;)

http://www.ikvm.net/

【讨论】:

我不想强迫插件的用户在单声道中加载 Eclipse ;) 虽然可行:-) developers.slashdot.org/article.pl?sid=03/05/10/2127222 这只是 Eclipse 运行.. 更不用说所有这些插件了 ;) 但不,我不认为 ikvm 可以解决这个问题。 您始终可以通过标准输入/标准输出进行通信。旧方式,但始终便携。【参考方案2】:

你可以使用 Tcp/Ip 让他们通信

【讨论】:

可以用,但是需要很多核心知识。而且在我看来有点复杂。

以上是关于如何在 .NET 和 Java 之间创建跨平台进程间通信?的主要内容,如果未能解决你的问题,请参考以下文章

.net是用来干嘛的

Dart/Objective-C 和 Dart/Java 之间的交互

Electron中通过ipcMain和ipcRender实现主进程和渲染进程之间的相互通信

Electron中通过ipcMain和ipcRender实现主进程和渲染进程之间的相互通信

.NETC#和ASP.NET三者之间的区别

Java多线程详解