title: How do you set a timeout on BufferedReader and PrintWriter in Java 1.4?
body: <p>How does one set a timeout on a BufferedReader and a PrintWriter created using a socket connection? Here is the code I have for the server right now, which works until either the server or the client crashes:</p>
  
  <pre><code>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));
      }
  }
  </code></pre>
  
  <p>Outside the scope of this code I have imposed a socket timeout of 1000ms, which works as intended when waiting for the initial connection. But the program blocks at (str = br.readLine()). If the client hangs or crashes, it never stops blocking unless I terminate the process (which even then doesn't always work).</p>
  
  <p>The client code in question is very similar to this, and is blocking in a similar fashion.</p>