2017-07-19 5 views
-1

私はJavaで非常に基本的なチャットアプリケーションをセットアップしたかったのです。だから私はサーバーとクライアントを書いた。Java ServerSocket/Serverは一度しか動作しません

サーバー:

 port = 9694; 

     server = new ServerSocket(port); 

     client = server.accept(); 

     optStream = client.getOutputStream(); 
     optWriter = new PrintWriter(optStream); 

     iptStream = client.getInputStream(); 
     iptReader = new BufferedReader(new InputStreamReader(iptStream)); 

     while(terminateServer == false){ 

      String s = null; 

      if((s = iptReader.readLine()) != null){ 

      optWriter.write(s + "\n"); 
      optWriter.flush(); 

      } 
     } 

     optWriter.close(); 
     iptReader.close(); 

クライアント:

 client = new Socket("192.168.0.100", 9694); 

     sc = new Scanner(System.in); 

     optStream = client.getOutputStream(); 
     optWriter = new PrintWriter(optStream); 

     iptStream = client.getInputStream(); 
     iptReader = new BufferedReader(new InputStreamReader(iptStream)); 

     while(terminateClient == false){ 

      this.send(getMessage()); 

      this.receive(); 

     } 


     optWriter.close(); 
     iptReader.close(); 

    } 

public void send(String text){ 

    String s = null; 

    s = text; 

     optWriter.write(s + "\n"); 
     optWriter.flush(); 

} 

public void receive(){ 

    String a = null; 

    try { 

     while((a=iptReader.readLine()) != null){ 

      System.out.println(a); 

     } 

    } catch (IOException e) { 
     // TODO Auto-generated catch block 

     e.printStackTrace(); 

    } 

} 

public String getMessage(){ 

    String s = null; 

    s = sc.nextLine(); 

    return s; 


} 

私の計画は、私は繰り返しメッセージを送ることができるようにwhileループを使用することでした。しかし何らかの理由でそれは一度しか動作しません。テキストを入力して、サーバーがそれを返します。あなたは別のものをタイプすることができますが、サーバはそれを返さないでしょう。

誰かが理由を知りましたか?

+0

コードの全体構造は明確ではありません(どのクラスにどのメソッドまたはメンバ、どのスレッドが実行されているかなど)。最小限で、完全で、検証可能な例を貼り付けてください。 – Heri

答えて

0

readLine()はストリーム終了時にnullを返します。この場合は、ピアが切断されたときにのみ発生します。したがって、コールの周りのwhileループは完全に無意味です。ピアが切断されると、何回呼び出しても、readLine()はfalseを返します。

関連する問題