2016-06-30 13 views
1

Javaを使用してサーバーを構築しようとしています。 私の質問は、複数のユーザーが同時にいる場合の対処方法ですか?答えはマルチスレッドです。しかし、私はする方法を知らない。JavaのマルチスレッドWebサーバー

たとえば、2つのクライアントが同時に接続され、サーバー(2 *の番号を持つ)がある場合:クライアント1がサーバーに「50」、クライアント2に「10」と表示されている場合、サーバーは第1のクライアントに「100」を返し、第2のクライアントに「20」を返すと仮定する。しかし、私は自分のコードが動作しているか分からない。

サーバー側:

public class Server { 
public static void main(String[] args){ 
    ServerSocket socket; 
    try { 
    socket = new ServerSocket(4444); 
    Thread t = new Thread(new Accept(socket)); 
    t.start(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

class Accept implements Runnable { 
    private ServerSocket socketserver; 
    private Socket socket; 
    private int nbrclient = 1; 
    public Accept(ServerSocket s){ 
     socketserver = s; 
    } 
    public void run() { 
     try { 
      socket = socketserver.accept(); 
      in = new BufferedReader (new InputStreamReader (socket.getInputStream())); 
      String message = in.readLine(); 
      System.out.println(message); 

      out = new PrintWriter(socket.getOutputStream()); 
      out.println("Pong"); 
      out.flush(); 
      socket.close(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

クライアント側:あなたが任意のアイデアを持っている場合は、私のコードが実行ように、2つのクライアントが動作するかどう

public class Client { 
    public static void main(String[] zero) {  
     Socket socket; 
     BufferedReader in; 
     PrintWriter out; 
     try { 
      socket = new Socket(InetAddress.getLocalHost(),4444); 
      out = new PrintWriter(socket.getOutputStream()); 
      out.println("Ping"); 
      out.flush(); 
      in = new BufferedReader (new InputStreamReader (socket.getInputStream())); 
      String message = in.readLine(); 
      System.out.println(message); 
      socket.close(); 
     }catch (UnknownHostException e) { 
      e.printStackTrace(); 
     }catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 

} 

は(どのようにマルチスレッドを実行するには、どのように検証します。 Javaおよびマルチスレッド動作するかどうか確認してください)

+0

サーバーが待機する「メイン」ポートがあります。クライアントがサーバーに接続すると、新しいポートで新しいスレッドを開始し、新しいポートを使用するようにクライアントに指示します。 – DwB

答えて

1

サーバー側は、whileループを必要とします:

public class Server { 
public static void main(String[] args){ 
    ServerSocket socket; 
    try { 
     while(true){ 
      socket = new ServerSocket(4444); 
      Socket socketInstance = socket.accept(); 
      Thread t = new Thread(new Accept(socketInstance)); 
      t.start(); 
     } 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

class Accept implements Runnable { 
    private Socket socket; 
    private int nbrclient = 1; 
    public Accept(Socket s){ 
     socket = s; 
    } 
    public void run() { 
     try { 

      in = new BufferedReader (new InputStreamReader (socket.getInputStream())); 
      String message = in.readLine(); 
      System.out.println(message);//this message should be your number 
      Double number = Double.parseString(message); 

      out = new PrintWriter(socket.getOutputStream()); 
      //out.println("Pong"); 
      out.println(2*number +""); 
      out.flush(); 
      socket.close(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

クライアント側は大丈夫です。 out.println("Ping");out.println("50");などで置き換えてください。

最初にサーバーを起動してから、複数のクライアントアプリケーションを起動できます。エラーがある場合は、ここに投稿し、正確なシナリオを見てください。

関連する問題