我有一个第三方服务器,我可以连接到它(在我的本地网络上)为我正在从事的项目做一些我需要做的整洁的事情。我使用第三方提供的 Java 库来处理所有连接内容,并且我可以使用他们的代码成功地将命令发送到服务器。他们的代码还提供了一些事件侦听器接口,只要我的程序正在运行,我就可以实现这些接口,以便从服务器获取状态更改。我想做的是创建一个程序,该程序将作为(或类似)服务运行,永久侦听服务器上的事件并将它们写入数据库,但我还需要能够侦听来自本地机器的连接,以便我可以使用命令行程序告诉我的服务向服务器发送消息(服务器一次只允许一个连接)。
我(简要地)看过JMS和RMI,但它们似乎都比我认为我需要在本地交流的要复杂和重量级得多。有没有一种方法可以更简单地在同一台机器上的两个正在运行的应用程序之间发送简单的消息(简单我的意思是单个管道分隔的字符串就可以了)?
如果你想要比 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();
}
}