-1

まず第一に、私はJavaが初めてです。その質問に興味を持っていただければ幸いですが、できるだけ明確に答えてください。そして、自分の問題をオープンな方法で伝えようとします。NetBeans を使用しています。2 つの jar ファイルを通信して、2 つの jar A と B を使用できるようにしたいと考えています。これらは両方とも処理中です。つまり、別々に実行され、2 つの開いたウィンドウが表示されます。jar Aのウィンドウで、ユーザーからの文字列を待ち、そこに「call B」と書きます。すると、jar B のウィンドウに、「プログラム A は ... で呼び出されます」と表示されます。インターネットで検索したところ、「java.util.jar.JarFile、Remote Method Invocation、Network Sockets など」というスタッフが見つかりました。しかし、初心者向けのわかりやすい答えが見つからなかったため、それらから結果を得ることができませんでした。その中から一つ提案するとしたら、

4

1 に答える 1

1

単純な形式の通信では、java.net.socketを使用して2つの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();

そして、これはあなたに2つの間で話すことができるための基礎を与えるはずです、あなたはおそらくそれが何か有用なものを出力するようにサーバー上に何らかの形式のプロトコル(メッセージを処理するためのもの)を実装する必要があるでしょう

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

于 2012-10-31T08:24:10.977 に答える