1

私のコードは次のとおりです。

BufferedRead readLine() を使用すると、プログラム全体がフリーズします。問題は、行の終わりに達するまで readLine が行を返さないことです。サーバーは新しい行の文字値を送信しないため、閉じません。

では、どうすればこれを乗り越えることができますか? 私のコードを編集してください。

                  while (ok) {
                        BufferedReader re = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                        aString = re.readLine();
                        ...
                    }

注:これをプログラムで実行したいのですが、それを実行しているプロセスを強制終了したくはありません

UPDATE

StringBuilder re= new StringBuilder();
                    while ((c = r.read()) >= 0) {
                            re.append( (char)c ) ;  
                    }
                    String result = re.toString();
                    byte[] contentInBytes = result.getBytes();
                    out.write(contentInBytes);
                    out.flush();
                    out.close();
4

1 に答える 1

1

BufferedReaderの readLine() メソッドを使用しないでください。個々の文字を読み取る read() メソッドを使用します。それらを int から文字に変換する必要がありますが、これにより改行文字を読み取る必要がなくなります。

編集:追加「re」がバッファリングされたソケット入力ストリームリーダーであると仮定します...

while ((i = re.read()) != -1)
{
   if (i > 0)
   {
      char c = (char) i;
      // Do something with the character
   }
}

編集終了

さらに、サーバーが応答しないことが懸念される場合は、Socketにタイムアウトを設定することをお勧めします。

socket.setSoTimeout(milliseconds);
于 2013-01-25T20:05:32.233 に答える