Java 如何让两个JVM';s在没有RMI或套接字的情况下通信?

Java 如何让两个JVM';s在没有RMI或套接字的情况下通信?,java,jvm,Java,Jvm,有没有可能让两个独立的JVM在没有RMI或套接字的情况下相互通信 我的情况如下: 我在一个控制台的命令行界面中有一个服务器(java应用程序)。我可以用SSH登录到计算机,所以我有了另一个终端。现在我想启动一个小java程序,它可以与服务器通信。这是为了控制服务器,所以没有太多的流量(只是一些小字符串传递) 我不想使用套接字或RMI,因为它使用另一个端口号 PipedWriter是一个选项吗?但是另一个JVM现在将如何找到它呢 谢谢您可以尝试实现,并让它监视文件上的更改 但是,您需要通过终端窗口

有没有可能让两个独立的JVM在没有RMI或套接字的情况下相互通信

我的情况如下:

我在一个控制台的命令行界面中有一个服务器(java应用程序)。我可以用SSH登录到计算机,所以我有了另一个终端。现在我想启动一个小java程序,它可以与服务器通信。这是为了控制服务器,所以没有太多的流量(只是一些小字符串传递)

我不想使用套接字或RMI,因为它使用另一个端口号

PipedWriter是一个选项吗?但是另一个JVM现在将如何找到它呢


谢谢

您可以尝试实现,并让它监视文件上的更改


但是,您需要通过终端窗口向该文件发送一些数据。这需要连接到SSH套接字并回显一些命令和数据。

您可以尝试实现,并让它监视文件上的更改


但是,您需要通过终端窗口向该文件发送一些数据。这需要连接到SSH套接字并回显一些命令和数据。

您不需要
PipedWriter
;这仅用于同一进程中线程之间的通信。您也不能使用未命名的OS管道,因为进程之间没有关系。您可以使用OS fifo(假设您在Unix上,当您使用system
mkfifo
命令时;我不太了解Windows的等效API,因此无法提供帮助),但我不知道Java在处理此类命名管道方面有多好

最简单的机制是使用监视的文件或仅绑定到localhost 127.0.0.1上的端口的服务器套接字。(通过以这种方式绑定,在没有某种本地程序或适当配置的SSH隧道的情况下,不可能从机器上访问套接字。)监视文件方法的优点和缺点是它需要两个进程都可以看到(并可能写入)的某处。管理套接字稍微公开一些,但更容易处理双向通信;如果这对你很重要,请考虑java的好(如果有一点低我的口味)支持插座。

如果您考虑共享文件解决方案,考虑是否将该文件设为数据库;SQLite有一个JDBC驱动程序,它支持安全的并发访问(并防止并发写入的问题,我打赌你从未想过)。这也可能意味着您可以避免编写特殊的客户机;现有的工具非常丰富。

您不需要
PipedWriter
;这仅用于同一进程中线程之间的通信。您也不能使用未命名的OS管道,因为进程之间没有关系。您可以使用OS fifo(假设您在Unix上,当您使用system
mkfifo
命令时;我不太了解Windows的等效API,因此无法提供帮助),但我不知道Java在处理此类命名管道方面有多好

最简单的机制是使用监视的文件或仅绑定到localhost 127.0.0.1上的端口的服务器套接字。(通过以这种方式绑定,在没有某种本地程序或适当配置的SSH隧道的情况下,不可能从机器上访问套接字。)监视文件方法的优点和缺点是它需要两个进程都可以看到(并可能写入)的某处。管理套接字稍微公开一些,但更容易处理双向通信;如果这对你很重要,请考虑java的好(如果有一点低我的口味)支持插座。

如果您考虑共享文件解决方案,考虑是否将该文件设为数据库;SQLite有一个JDBC驱动程序,它支持安全的并发访问(并防止并发写入的问题,我打赌你从未想过)。这也可能意味着您可以避免编写特殊的客户机;现有的工具非常丰富。

DefaultFileMonitor是个不错的建议。DefaultFileMonitor是个不错的建议。非常感谢!我想构建一个优雅、漂亮的解决方案,我希望有一个比套接字更干净的解决方案,但似乎没有:(.好吧,我会选择套接字,因为监视的文件更难看(很抱歉这么说)。fifo可能是一个解决方案,但会破坏可移植性,而且也很难看。IPC很难看(或者是一个包装器很难看)因为在某个时刻,您必须在进程之间序列化消息,并通知另一端消息在那里。(或者您使用共享内存和基于此的技术,但要正确处理这一点更为棘手。)是的,这是事实……但是,我看不到针对这种特定情况的简单而干净的解决方法,所以我将使用最干净的解决方案。另一种解决方案,类似于Unix FIFO,将使用Unix套接字:非常感谢!我想构造一个优雅、漂亮的解决方案,我希望有一个比套接字更干净的解决方案,但似乎没有ne:(.好吧,我会选择套接字,因为监视的文件更难看(很抱歉这么说)。fifo可能是一个解决方案,但会破坏可移植性,而且也很难看。IPC很难看(或者是一个包装器很难看),因为在某个点上,您必须在进程之间序列化消息,并通知另一端有消息。(或者您使用共享内存和基于此的技术,但这更难做到。)是的,这是一个事实……但是,我看不到针对这种特定情况的简单而干净的解决方法,因此我将使用最干净的解决方案。另一种解决方案,类似于Unix FIFO,将使用Unix套接字: