-1

クライアントがサーバーと通信できる小さな Java チャットルーム プログラムを実装しました。複数のクライアントは機能しませんが、接続中にクライアントがソケットを予約しているためだと思いますか? 複数のクライアント機能を追加する簡単な方法はありますか? ご協力いただきありがとうございます。

public void startRunning(){
      try{
         server = new ServerSocket(6789, 100); // port no, max users
         while(true){
            try{
               waitForConnection();
               setupStreams();
               connectionRecieving();
            }catch(EOFException eofException){
               showMessage("Server ended connection \n");
            }finally{
               closeConnection();
            }
         }
      }catch(IOException ioException){
         ioException.printStackTrace();
      }
   }

   // Wait for connection
   private void waitForConnection() throws IOException{
      showMessage("Attempting connection... \n");
      connection = server.accept();
      showMessage("Connected to: " + connection.getInetAddress().getHostName() + "\n");
   }

   // Get stream to send and receive data
   private void setupStreams() throws IOException{
      output = new ObjectOutputStream(connection.getOutputStream());
      output.flush();
      input = new ObjectInputStream(connection.getInputStream());
   }

   // Close streams and sockets 
   private void closeConnection(){
      showMessage("----- \nClosing connections... \n");
      try{
         output.close();
         input.close();
         connection.close();
      }catch(IOException ioException){
         ioException.printStackTrace();
      }
   }
4

1 に答える 1

0

複数のクライアントに対して同時に読み書きするには、個別のスレッド (ブロッキング IO) が必要になるか、単一のスレッドを使用する場合は NIO (ノンブロッキング IO) が必要です。

実装の違いについてはこの投稿を確認できますが、通常は NIO の方が効率的です。

ブロッキング I/O の使用は、通常、上記で使用したコードに従いますが、受け入れられた各ソケットを処理するために個別のスレッドが必要になる点が異なります。NIO の使用法はもう少し複雑です。このチュートリアルをチェックしてください。

于 2013-02-14T19:41:15.847 に答える