2012-01-12 43 views
1

A、B、Cの3つのエンティティがあります。Aはサーバー、BとCはクライアントです。 Aは、クラスを使用して実装されたマルチスレッドサーバーですjava.netソケットを介した通信:1台のサーバーと2台のクライアント

BはAにメッセージを送信し、AはメッセージをCに送信し、Cはメッセージを送信します。B:クライアントCサーバーでも、メッセージを転送するクライアントでなければなりませんか?

public class ServerA{ 

public static void main(String[] args){ 

    boolean listening = true; 
    int port_number = 8888; 

    try{ 

     ServerSocket ss = new ServerSocket(port_number); 

     System.out.println("Waiting for incoming connection..."); 

     while(listening){ 

      new Thread(new ServerThread(ss.accept())).start(); 

     } 

    } 
    catch(IOException ioe){ioe.printStackTrace();} 
} 
} 

public class ServerThread implements Runnable{ 

    @Override 
    public void run(){ 

    } 

}

+1

申し訳ありませんが、私はあなたの質問を理解していません。あなたは正確に何をしようとしていますか?これはコンパイル可能なコードのように見えません。 ServerThreadとは何ですか? –

+0

質問は非常に簡単です:私は2つのクライアントと1つのサーバー間の通信チャネルを作成します。これは、トークンリングプロトコルに似ています.1人のクライアントがメッセージを送信し、しばらくしてから結果を受信します。 – Mazzy

+0

ここでクライアント/サーバーのことが起こっていることを理解しています(そして、私はトークンとの類推を見ません)。残念ながら、私はあなたの質問をまだ理解していません。申し訳ありません:/ –

答えて

1

あなたがそのようなあなたのアーキテクチャを設計したいと思いますなぜ、特定の理由がありますか?

あなたの質問に答えるには、少し考えてみましょう。クライアントCからクライアントBにメッセージを送信するには何が必要ですか?どのように実装したいですか?あなたのコメントでチャンネルを言いましたが、2つのクライアント間で "チャンネル"を開くにはどういうことがありますか? (クライアントBの)場所とポートクライアントBがメッセージを聞いているかどうかを知る必要があります(最悪の場合、各クライアントはすべての/いくつかの他のクライアントについて知っています。 /すべてのクライアントと何らかのレジストリを持っている)。また、明らかに、クライアントBはポートを開いてメッセージを待つ必要があります。

したがって、基本的にクライアントCはサーバーAに何かを照会し、応答を取得してクライアントAと同じようにリスンする必要があるクライアントBにメッセージを送信します。これは基本的にserver-clientがするものです。

LANなどにあることが分かっている場合は、TCPではなくUDPを使用することを検討できますが、信頼性が高くないので、自分で管理する必要があります。

このアーキテクチャは、ピアツーピアネットワーク(すべての「クライアント」はクライアントとサーバーの組み合わせに近い)を思い起こさせます。

+0

私はServerSocketを実装するクラスjava.netを使用します。あなたはCがサーバーとクライアントのどちらかでなければならないと言いますか?あなたが言ったとおりの正確なものではありません。 BはメッセージをAに送信します。CはメッセージをBに送信します。 – Mazzy

+0

ああ、間違っています(CがAをクエリすると思っていましたが)それほど変わっていません。基本的には、BとCの間で何らかの形で通信する必要があります。そして、ソケットを使用した通信は、あなたが説明したのと同じように機能します:1つのエンドポイントはオープンソケットを持ち、それをリッスンします(それに対してServerSocketを使用します)、別のエンドポイントはメッセージをSocketクラスを使用して送ります。また、クライアントとクライアントの通信にUDPを使用することも検討しています。また! AがCに照会しなかった場合に、CがAにメッセージを送信したい場合には、Aはメッセージを受信しなければならない。 –

関連する問題