【问题标题】:Best way to communicate between java applications running on the same computer [duplicate]在同一台计算机上运行的java应用程序之间进行通信的最佳方式[重复]
【发布时间】:2014-11-23 21:09:23
【问题描述】:

我正在编写一个小应用程序,它将充当更大应用程序的卸载程序。如果它正在运行,我希望卸载程序能够向应用程序发送一条非常基本的消息(一个简单的通知)。

最好的方法是什么?

我想要的说明:

public class Uninstall {
    public static void main(String[] args) {
        if(isRunning("Application")) {
            // Tell Application to clear data & exit
            sendMessage("Application","EXIT");
        }
    }
}

【问题讨论】:

    标签: java


    【解决方案1】:

    你的选择基本上是

    • 通过文件系统

      有点笨拙,但易于调试。基本上,您的主应用程序会密切关注文件系统(例如使用WatchService。更多信息here)。

    • 通过普通的socktes

      您的主应用程序打开一个套接字并接受来自其他要与其通信的应用程序的连接。如果您只想关闭主应用程序,那么简单

      new Thread() {
          public void run() {
              new ServerSocket(123456).accept();
              System.exit(0);
          }
      }.start();
      

      可能会。

    • 超过 RMI

      使用 RMI 注册表让您的卸载程序在您的主应用程序上执行远程方法调用。

    假设您将同时构建主应用程序和安装程序。而且由于它们将在相同的 JVM 版本上运行,并且都在 localhost 上运行,我肯定会推荐 RMI。

    (其他特定于操作系统的答案可能包括命名管道或信号,但我不鼓励您朝这个方向发展。)

    【讨论】:

    • 感谢您的快速回答,RMI 绝对是我想要的。
    • @Underbar:RMI 可能完全是矫枉过正和不必要的复杂性。
    • @jarnbjo 你会推荐什么?遍历文件系统/套接字似乎为任何其他应用程序打开了一个漏洞,以强制我的应用程序卸载。
    • RMI 并不安全。事实上,我认为没有办法防止有人冒充卸载程序。如果您只想发送一个简单的命令,那么简单的套接字可能是最好的选择。
    • 当然可以实现某种身份验证机制来防止任何“未知”应用程序发送 IPC 信号。 RMI 和普通套接字通信都不提供自己的身份验证。
    猜你喜欢
    • 1970-01-01
    • 2014-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多