ソケット接続を使用して作成されたBufferedReaderとPrintWriterにタイムアウトを設定するにはどうすればよいですか?サーバーまたはクライアントのいずれかがクラッシュするまで機能する、現在サーバー用に持っているコードは次のとおりです。
while(isReceiving){
str = null;
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter pw = new PrintWriter(socket.getOutputStream(), true);
while ((str = br.readLine()) != null){
System.out.println("Processing command " + str);
pw.println(client.message(str));
}
}
このコードの範囲外で、1000msのソケットタイムアウトを課しました。これは、最初の接続を待機するときに意図したとおりに機能します。しかし、プログラムは(str = br.readLine())でブロックします。クライアントがハングしたりクラッシュしたりした場合、プロセスを終了しない限り、ブロックが停止することはありません(それでも常に機能するとは限りません)。
問題のクライアントコードはこれに非常に似ており、同様の方法でブロックしています。