1

私が取り組んでいるプロジェクトのために必要ないくつかのきちんとしたことを行うために、(ローカルネットワーク上で) 接続できるサードパーティのサーバーがあります。サードパーティから提供された Java ライブラリを使用してすべての接続を行い、そのコードを使用してサーバーにコマンドを正常に送信できます。彼らのコードは、プログラムが実行されている限り、サーバーからステータス変更を取得するために実装できるいくつかのイベント リスナー インターフェイスも提供します。私がやりたいことは、サーバー上のイベントから永続的にリッスンしてデータベースに書き込むサービスとして (または同様に) 実行されるプログラムを作成することですが、ローカル マシンからの接続をリッスンできる必要もあります。そのため、コマンド ライン プログラムを使用して、サービスにメッセージをサーバーに送信するように指示できます (サーバーは一度に 1 つの接続しか許可しません)。

私は JMS と RMI を (簡単に) 見てきましたが、どちらもローカルで通信する必要があると思うものよりもはるかに複雑で重いようです。同じマシンで実行中の 2 つのアプリケーション間で単純なメッセージを送信するためのより簡単な方法はありますか?

4

1 に答える 1

1

RMI や JMS よりも単純なものが必要な場合は、プロセス間通信にソケットを使用できます。

ソケットに関する Java チュートリアルは、始めるのに適した場所かもしれません。

サーバーがクライアントが参加するまで待機し、クライアントからメッセージを受信する単純な 1 メッセージのクライアント サーバーは、次のようになります。

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();
    }
}
于 2013-02-01T17:14:07.853 に答える