2017-02-27 7 views
0

クライアントがサーバと順番に話をしたいのと混同しています。たとえば、私は2人のクライアントがゲームサーバーに接続する、マルチプレイヤーtic tac toeゲームを作成しています。クライアントは次にxの座標を入れます。しかし、whileループでbreakを使用すると、ソケットを切断する前に一度だけ入力することができます。他のクライアントが応答している間にクライアントが一時的にブロックされるようにするにはどうすればよいですか?クライアントがサーバと順番に話すことを許可する

編集:私はこの目的のためにマルチスレッドを使用するつもりはありません。 (読書の目的のために切り捨て)

サーバー:(読書の目的のために切り捨て)

try { 
     while (true) { 
      System.out.println("Awaiting connection!"); 
      Socket clientSocket = server.accept(); 
      System.out.println("Player " + noOfPlayers + " has connected!"); 
      noOfPlayers ++; 
      out = new PrintWriter(clientSocket.getOutputStream(), true); 
      in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); 

      while (!newGame.checkWinner()) { 
       out.println(newGame.currentPlayer()); 
       input = in.readLine(); 
       x = Integer.parseInt(input.split("\\,+")[0]); 
       y = Integer.parseInt(input.split("\\,+")[1]); 
       newGame.addPoint(x, y); 
       out.println("Moved"); 
       if (newGame.checkWinner()) { 
        System.out.println("The winner is " + newGame.currentPlayer()); 
        out.println("The winner is " + newGame.currentPlayer()); 
        server.close(); 
        break; 
       } 
       else if (newGame.boardFilledUp()) { 
        newGame.loadBoard(); 
        out.println("It's a draw!"); 
        server.close(); 
        break; 
       } 
       newGame.loadBoard(); 
       newGame.changePlayer(); 
       break; 
      } 
     } 
    } catch (Exception e) { 
     System.out.println(e.getMessage()); 
    } 

クライアント:問題を考え出し

while (true) { 
     PrintWriter out = new PrintWriter(echoSocket.getOutputStream(), true); 
     // Read input from server 
     BufferedReader in = new BufferedReader(new InputStreamReader(echoSocket.getInputStream())); 
     // Read input from client 
     BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in)); 
     System.out.println("Enter your coordinates in x,y form: "); 
     String userInput; 
     char serverOutput; 
     serverOutput = in.readLine().charAt(0); 
     System.out.println("Current player is " + serverOutput); 
     while ((userInput = stdIn.readLine()) != null) { 
      out.println(userInput); 
      System.out.println("You sent: " + userInput); 
     } 
     break; 
    } 
+0

クライアントに「他の人が移動するのを待つ」と伝えるだけです。 –

+0

@Balazsあなたは、サーバーからの文字列の確認があるかどうかをクライアントに確認させることを意味しますか? – bryancresswell

+0

常にサーバーサイドからゲームをコントロールし、クライアント側から制御されるものがあれば、「不正行為」につながる可能性があります:)。そして、はい、クライアントがどこかをクリックするようにしますが、クライアントがそれについて考えていることをクライアントに知らせます。 –

答えて

0

。私はPrintWriterをフラッシュしなかった。

関連する問題