【问题标题】:Communicate Two Jar File [closed]沟通两个 Jar 文件 [关闭]
【发布时间】:2012-10-20 14:49:25
【问题描述】:

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

【问题讨论】:

    标签: communication


    【解决方案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

    【讨论】:

    • 感谢您的快速回复。我会处理您的建议,然后通知您结果。
    • 查看您的代码后,我搜索了一些关于服务器套接字的主题并将您的代码与它们结合起来,它可以成功运行。然而,现在我有另一个问题。我怎样才能创建一个jar文件?我的意思是,如果我对 A 类和 B 类说“运行文件”,它会起作用。但是当我说'Build and Run Project'时,A和B的窗口出现了,但他们没有任何反应。有没有办法用服务器套接字制作一个jar文件?
    • 查看 oracle 文档中的Deploying a JAR,步骤应该相当简单
    猜你喜欢
    • 2023-03-27
    • 2021-05-09
    • 2012-08-09
    • 2012-02-04
    • 2012-05-02
    • 2014-11-17
    • 1970-01-01
    • 2011-04-21
    • 2010-10-13
    相关资源
    最近更新 更多