-1

首先,我是 Java 新手。我希望你会对这个问题感兴趣,但请让你的答案尽可能明显。我会尝试以公开的方式讲述我的问题。我正在使用 NetBeans。我想以这样的方式交流两个 jar 文件,让我有两个 jar A 和 B。它们都在进程中,也就是说它们是单独执行的,我看到两个打开的窗口。在 jar A 的窗口中,它等待来自用户的字符串,我在那里写“调用 B”。然后在 jar B 的窗口中,会说“program A is called at ...”。我在互联网上搜索,我找到了这样的工作人员;“java.util.jar.JarFile,远程方法调用,网络套接字等”。但是我无法从他们那里得到任何结果,因为我找不到初学者可以理解的答案。所以如果你推荐其中之一,

4

1 回答 1

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 对话的逻辑,您还需要创建客户端以便能够与之交互。

程序B:

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

于 2012-10-31T08:24:10.977 回答