1

我有一个第三方服务器,我可以连接到(在我的本地网络上)为我正在处理的项目做一些我需要做的整洁的事情。我使用第三方提供的 Java 库来连接所有的东西,我可以使用他们的代码成功地将命令发送到服务器。他们的代码还提供了一些事件侦听器接口,只要我的程序正在运行,我就可以实现这些接口以从服务器获取状态更改。我想做的是创建一个程序,该程序将作为(或类似)服务运行,永久监听服务器上的事件并将它们写入数据库,但我还需要能够监听来自本地机器的连接所以我可以使用命令行程序告诉我的服务向服务器发送消息(服务器一次只允许一个连接)。

我已经(简要地)查看了 JMS 和 RMI,但它们似乎都比我认为我需要在本地进行通信的更复杂和重量级。是否有一种更简单的方法可以在同一台机器上的两个正在运行的应用程序之间发送简单的消息(简单的意思是一个管道分隔的字符串就可以了)?

4

1 回答 1

1

如果您想要比 RMI 和 JMS 更简单的东西,您可以使用套接字进行进程间通信。

关于套接字的 java 教程可能是一个不错的起点。

一个简单的单消息客户端-服务器,服务器等待客户端加入,然后从客户端接收消息,如下所示:

public class SocketsServer {

    public static void main(String[]rags) throws Exception
    {
        ServerSocket ss1 = new ServerSocket();
        ss1.bind(new InetSocketAddress("localhost",9992));
        //accept blocks until someone connects
        Socket s1 = ss1.accept();
        BufferedReader br = new BufferedReader(new InputStreamReader(s1.getInputStream()));
        String line;
        while( (line = br.readLine()) != null )
        {
            System.out.println(line);
        }
        s1.close();
        ss1.close();
    }
}

对于客户端:

public class SocketsClient {

    public static void main(String[]args) throws Exception
    {
        Socket ss = new Socket();
        ss.connect(new InetSocketAddress("localhost", 9992));
        PrintWriter pw = new PrintWriter(ss.getOutputStream(), true);
        pw.println("hello socket");
        ss.close();
    }
}
于 2013-02-01T17:14:07.853 回答