【问题标题】:Passing event from C# application to Java application将事件从 C# 应用程序传递到 Java 应用程序
【发布时间】:2011-04-10 15:24:02
【问题描述】:

我有一个 Java 应用程序,它在客户端计算机上启动一个小型 C# 应用程序。

我需要一个简单的解决方案来在 C# 和 Java 应用程序之间传递事件。

为了处理相反的方向(Java->C#),我使用了 FileSystemWatcher,它侦听文件夹更改事件。 Java 应用程序将一个空文件写入共享文件夹,C# 应用程序根据(空)文件名处理这些事件(然后将其从“队列”中删除)。 找不到与 FileSystemWatcher 等效的 Java 来解决从 C# 向 Java 传递事件的问题。

有什么创意吗? (提醒:这只是一个 Java 应用程序,所以我没有 Apache 服务器或类似的东西)。

谢谢

【问题讨论】:

  • 你是通过文件系统传递事件吗?
  • 当然没有必要安装 Apache 来拥有 Web 服务器。您可以将小型 Web 服务器集成到您的应用程序中。但是因为您正在与本地计算机上的应用程序通信,所以无需担心防火墙问题,因此通过端口 80 进行通信或使用 HTTP 不是必需的 - 您可以使用任何类型的 TCP/IP 套接字。

标签: c# java events filesystemwatcher


【解决方案1】:

写于 2010 年的一篇不错的简单文章

Use Named Pipes to Communicate Between Java and .Net Processes

【讨论】:

  • 看起来是一个有趣的解决方案,谢谢。但是,在测试它之前,我想知道:它使用 .Net 作为服务器,使用 Java 作为客户端,而我需要相反的方式(.Net 将事件发送到 Java)。对我还有用吗?
  • 命名管道与服务器没有任何关系,它们本质上是虚拟文件。见en.wikipedia.org/wiki/Named_pipe
  • @Ranch,它应该仍然可以与一些代码更改相同。 @Gordon,我认为@Ranch 更多地指的是每个人在提到服务器/客户端时所扮演的角色。根据他问题的上下文,所有这些都发生在同一台机器上。
【解决方案2】:

http://jni4net.sourceforge.net/

这可能是你的一个选择。

这似乎是

的复制品

IPC between .NET and Java client applications

【讨论】:

    【解决方案3】:

    我会使用像 ActiveMQ 这样的简单 JMS 服务器来来回传递消息。

    【讨论】:

      【解决方案4】:

      基本上你需要进程间通信。有很多方法。

      • 套接字
      • 命名管道
      • 任何分布式队列,如 RabbitMQ、ActiveMQ 等
      • 命名互斥体

      http://www.ikvm.net/

      e.t.c.

      【讨论】:

        【解决方案5】:

        有很多可能的方法,但它们通常分为两类:

        javac# 互操作(如http://jni4net.sourceforge.net/) 要么 某种形式的标准化通信,例如 Web 服务(它们不需要“服务器”来工作),例如 C# 中的 WCF 和 java 端的 Metro。

        顺便说一句:你真的不应该使用文件系统来传递事件。

        【讨论】:

        • 我感觉使用文件系统不是完美的解决方案,但它运行良好且足够稳定。还有什么我不应该使用它的原因吗?
        • 让我们看看: 1. 如果监听端崩溃会发生什么 - 另一端怎么知道呢?它只会继续写入空文件并最终可能崩溃。 2. 没有确认收到对某些类型的通信很重要的消息。 3. 这很容易受到干扰 - 其他应用程序不希望您将数据写入某个文件夹。用户可以尝试打开其中一个文件,这将阻止侦听器删除它。 (字符不足 - 下一条消息中更多)
        • 4.从文件系统写入和擦除需要时间,这对发送/接收消息所需的时间提出了非常严格的限制。 5. 消息长度(最大文件名长度)有硬性限制。我相信其他人可以提出很多其他原因,但主要是:有标准的、有据可查的、全面的、有效的解决方案来解决这个问题。没有必要重新发明轮子。您可能会重新解决其他人已经解决的所有问题。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-08-09
        • 2014-05-21
        • 2014-03-25
        • 1970-01-01
        • 1970-01-01
        • 2020-07-02
        相关资源
        最近更新 更多