2016-05-14 13 views
0

進歩しようとしています。このwhileループは、ソケットから行を受け取ったときにハングするようです。ここでJava、whileループのBufferedReaderに関する問題

は、コードのサーバー側です:

out = new PrintWriter(socketcliente.getOutputStream(), true); 
in = new BufferedReader(new InputStreamReader(socketcliente.getInputStream())); 
//receive and shows client data 
      linea = 0; 
      while ((buffer[linea] = in.readLine()) != null) { 
       System.out.println(buffer[linea]); 
       linea = linea+1; 
      } 
//asks for a command and sends it to client 
      System.out.println("Enter remote command"); 
      while ((input = scanner.nextLine()) != null) { 
       out.println(input); 
      } 

、ここでは、クライアント側です:

out = new PrintWriter(socketcliente.getOutputStream(), true); 
in = new BufferedReader(new InputStreamReader(socketcliente.getInputStream())); 
//sends a limited amount of lines to the server 
linea = 0; 
     while (buffer[linea] != null) { 
      out.println(buffer[linea]); 
      linea = linea+1; 
     } 
//receive the command from server, executes and save output for sending to the server 
     while ((comandor = in.readLine()) != null) { 
      proceso = Runtime.getRuntime().exec(comandor); 
      pinput = new BufferedReader(new InputStreamReader(proceso.getInputStream())); 
      buffer = new String[100]; 
      linea = 0; 
      while ((psalida = pinput.readLine()) != null) { 
       buffer[linea] = psalida; 
       linea = linea+1; 
      } 
     } 

サーバーが受信したデータを印刷した後、それは何もしない、またwhileループを抜けます。データをクライアントに送り返す必要があります。私はPrintWriterとBufferedReaderを使用しています。

編集:私が試していることを理解するための完全なコード。コマンドの実行と出力の保存は正常に実行され、問題はサーバー内のデータを受信し、すべてのデータを取得しますが、最後に停止し、最初のwhileループを終了しません。ループを終了させるにはどうすればよいですか?私はメッセージの後に、クライアントからのNULLバイトを送信しようとしたか、のようなサーバーが理解できる「テキスト終了」:私は失われたんだと行う方法を見つけることができませんでした

while ((buffer[linea] = in.readLine()) != null && (buffer[linea] = in.readLine()) != "quit")

を。

これらはすべてtry文です。 何も機能しません。私は初心者です、助けてくれてありがとう。あなたのserver sideコードで

+2

読者は文句を言わない場合はnullを返します。 – matt

+0

あなたのコードは一般的に非常にエラーを起こしやすいようです。私たちはあなたが達成しようとしていることを知らない。そのようなバッファ=新しい文字列[100]; 100行に制限されていない限り、オーバーフローを引き起こす可能性があります。 – vladaman

答えて

3

あなたがlineのために書かれているインクリメントラインが間違っている、とても全体 `サーバー側のコードが

line = 0; 
while ((buffer[line] = in.readLine()) != null) { 
    System.out.println(buffer[line]); 
    line++; 
} 
-1

代わりのStringBuilderに読む文字列以下のように見なければならないline = line+1;として補正しなければなりません - 以下の割り当て、より速く、eaasier:あなたはソケットを閉じるまで

StringBuilder builder = new StringBuilder(); 
String aux = ""; 
BufferedReader pinput = new BufferedReader(new InputStreamReader(process.getInputStream())); 

while ((aux = pinput.readLine()) != null) { 
    builder.append(aux); 
} 

String text = builder.toString(); 
関連する問題