Java:从本地程序听取指令

时间:2013-01-31 17:59:53

标签: java event-handling communication

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

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

1 个答案:

答案 0 :(得分:1)

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

sockets上的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();
    }
}