【问题标题】:Passing a signal from a .NET app to a Java app将信号从 .NET 应用程序传递到 Java 应用程序
【发布时间】:2012-12-23 10:22:09
【问题描述】:

我需要将信号从 .NET 应用程序传递到 Java 应用程序。不需要数据,信号本身就足够了。

我想到的最简单的方法是使用这样的命名同步对象:

  1. .NET 应用程序创建一个特定的命名同步对象 A。
  2. Java 应用程序创建某个命名的同步对象 A - 名称与 (1) 中的相同。
  3. Java 应用程序有一个线程等待对象变为信号状态。
  4. .NET 应用程序向对象发出信号。
  5. Java 应用线程唤醒并根据信号接收采取行动。

至少,如果我知道如何在 Java 中创建命名同步对象,我会这样做。

但是看起来 Java 没有,我很难相信。是不是说只有 Windows 有命名的同步对象?

那么,我的问题是——如何将一个简单的信号(无数据)从非 Java 应用程序传递到 Windows 上的 Java 应用程序?两个进程在同一主机上运行。

编辑

动机 - 我想向我们的无头 Java 进程发出信号,让它尽快优雅地终止自己。

【问题讨论】:

    标签: java windows ipc


    【解决方案1】:

    您可以在您的程序之间创建一个套接字连接,并通过发送和接收特定模式您可以检测信号

    【讨论】:

    • 请同意我的观点,它比使用命名同步对象要复杂得多。你想说Java不支持这个概念吗?
    • ye,也可能是太难用了,tcp socket在各个平台都非常简单可靠
    • “是”如“Java 不支持命名同步对象”?如何在两个 Java 进程之间进行同步?仅使用消息传递或 TCP 套接字?
    • 我是一名c#程序员,我对java的了解还不够,但我相信使用TCP Socket你可以做到这一点
    • 是的,但是在 C#/C++ 中,您也可以使用命名的同步对象来执行此操作,例如 Event。而且它比使用 TCP 套接字要简单得多,这对于一个简单的信号来说确实是一种过度杀伤力。让我给你举个例子。如何防止 Windows 应用程序有多个正在运行的实例?是的,当然,可以创建一个锁定文件并检查它的存在,甚至可以创建一个 TCP 套接字并尝试监听它。但世界上最简单的事情就是检查一个命名的同步对象是否存在,比如 Event 或 Mutex。我的需求是相似的 - 我想发出一个进程自行终止的信号。
    【解决方案2】:

    我转念一想,我以前用过 ICE Framework,你可以从这里下载和学习 ICE Framework, ICE 框架是一个用于本地系统或网络上的进程之间通信的交叉框架。

    Download Ice Framework

    【讨论】:

      【解决方案3】:

      看在上帝的份上,我只想要一个从 C++/C# 进程到 Java 进程的 1 位信号,而且没有简单的方法可以做到这一点。我不敢相信。

      算了,我就用文件系统吧。 C++/C# 代码将在众所周知的位置创建一个空文件,Java 代码将每秒轮询一次。

      Finito,故事结束。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-03-25
        • 1970-01-01
        • 2014-07-08
        • 2016-11-22
        • 2011-05-01
        相关资源
        最近更新 更多