沟通两个Jar文件

时间:2012-10-31 07:13:36

标签: communication

首先,我是Java新手。我希望你对这个问题感兴趣,但请尽可能明白你的答案。我将尝试以开放的方式讲述我的问题。 我正在使用NetBeans。我想传达两个jar文件这样的方式,让我有两个罐A和B.它们都在进行中,即它们是单独执行的,我看到两个打开的窗口。在jar A的窗口中,它等待来自用户的字符串,然后我在那里写“call B”。然后在jar B的窗口中,它会说“程序A被称为......”。我在互联网上搜索,我找到了这样的工作人员;“java.util.jar.JarFile,远程方法调用,网络套接字等”。但我无法从他们那里得到任何结果,因为我找不到初学者可以理解的答案。因此,如果您建议其中一个,请至少给我一个小例子,说明如何使用它们。

1 个答案:

答案 0 :(得分:1)

对于简单的通信形式,您可以使用java.net.socket在两个jar文件之间进行通信。这样您就可以获得所需的“乒乓”效果。

在programA中,您将设置服务器套接字并侦听客户端连接

try {
serverSocket = new ServerSocket(4567);
} 
catch (IOException e) {
    System.out.println("Could not listen on port: 4567");
    System.exit(-1);
}
Socket clientSocket = null;
try {
    clientSocket = serverSocket.accept();
} 
catch (IOException e) {
    System.out.println("Accept failed: 4567");
    System.exit(-1);
}

如果服务器能够接受客户端,则clientSocket对象将远程地址和远程端口设置为客户端的地址。

服务器成功建立与客户端的连接后,它使用以下代码与客户端(程序B)通信:

PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
BufferedReader in = 
new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
String inputLine, outputLine;

out.println("ping");

while ((inputLine = in.readLine()) != null) {   
    System.out.println("Program B says: " + inputLine);
    out.println("server: " + inputLine);
    if (inputLine.equals("quit"))
        break;
}

现在您已经编写了程序A的逻辑,以便能够与程序B交谈,您还需要创建客户端以便能够与程序进行交互。

ProgramB:

Socket socket = new Socket("programb", 4567);
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
BufferedReader sysIn = new BufferedReader(new InputStreamReader(System.in));
String fromServer;
String fromUser;


while ((fromServer = in.readLine()) != null) {
    System.out.println("Server: " + fromServer);
if (fromServer.equals("server: quit"))
    break;

fromUser = sysIn.readLine();
if (fromUser != null) {
    System.out.println("Client: " + fromUser);
    out.println(fromUser);
}

}

然后好好练习关闭溪流

out.close();
in.close();
sysIn.close()
socket.close();

这应该为你提供一个能够在两者之间进行交流的基础,你可能需要在服务器上实现某种形式的协议(处理消息的东西),以便它输出一些有用的东西

参考:http://docs.oracle.com/javase/6/docs/api/java/net/Socket.html