2011-07-14 6 views
2

複数のクライアントをリッスンするソケットサーバーを作成する必要があります。同時に6つのクライアントがサーバに接続しており、各クライアントが同時にいくつかのコマンドをサーバに送信しているとします。これらのクライアントが1秒ごとにサーバーにメッセージを送信すると、サーバー側の6つのクライアントからのメッセージを処理して、テーブルに格納し、各クライアントに確認応答を送信することができます。ソケットサーバーと複数のクライアントとのJava

これらの入力をクライアントから処理するにはどうすればよいですか。クライアントからこれらの入力を処理するために6つのスレッドを作成する必要があるかどうか。

私はこの問題に近づくように考えてください。

答えて

0

これを行うためにサーブレットコンテナを使用できない理由は何ですか?これはServlet + Tomcat/Jettyのコード行10行です。

+0

必要条件はsocket.Anywayでどうやってサーブレットで行うのか教えてください。 – bharathi

3

クライアント接続ごとに新しいスレッドを作成し、処理するデータを探すために、各スレッドのストリームのブロッキング読み取りを継続します。

class Server { 

    ClientThread threads[]; 
    int    size; 
    ServerSocket serverSocket; 
    boolean   active; 

    Server() throws Exception { 
     /* initialize connection */ 
     active = true; 
     listen(); 
    } 

    void listen() throws Exception { 
     while (active) { 
      Socket clientSocket = serverSocket.accept(); 
      threads[ size++ ] = new ClientThread(clientSocket); 
      threads[ size - 1 ].start(); 
     } 
    } 
} 

class ClientThread extends Thread { 

    OutputStream out; 
    InputStream  in; 
    boolean   active; 

    ClientThread(Socket clientSocket) throws Exception { 
     out = clientSocket.getOutputStream(); 
     in = clientSocket.getInputStream(); 
    } 

    public void run() { 
     active = true; 
     while (active) { 
      listen(); 
     } 
    } 

    private void listen() { 
     try { 
      int res = process(in.read()); 
      out.write(res); 
     } catch (Exception e) {} 
    } 

    private int process(int b) { 
     return -1; 
    } 
} 
+0

+1ですが、予約しています。私はそれを「ポーリング」と呼ぶことはしません。私はそれをブロッキング・リードと呼んでいます。あなたはEOSについて確かに何かをするべきです。 – EJP

+0

ええ、whileループは、私がread()ブロックを知っていたとしても、最初はポーリングを考えるようにしました。ヘッドアップをありがとう。 – blackcompe

関連する問題