title: ObjectInputStream - How to wait for new data?
body: <p>I've got a client-server app I'm making and I'm having a bit of trouble when reading objects on the server.</p>
  
  <p>After my server connects to a client socket, I build object input and output streams and pass them along to my <code>service()</code> method. In there, I'm supposed to handle different kinds of messages from the client. I can get a message from the client (that is, a <code>Message</code> object, of my design) just fine. But of course, what I want to do is have a loop so I can get a message, process it, and respond back.</p>
  
  <p>So far, my code only works for a single message. When I added my loop, what happened was on every iteration, my server just kept reading the same message over and over again before my client got a chance to send a new message over the socket (I think this is what's happening, at least).</p>
  
  <p>So what I really need to do is figure out how to make my <code>service()</code> method wait for new input. Any ideas? Or am I approaching this wrong? Do I need to create a new OIS on every iteration or...? Some code:</p>
  
  <pre><code>public void service(ObjectInputStream input, ObjectOutputStream output) throws IOException, Exception {
  
      _shouldService = true;
  
      while (_shouldService) {
                      // It just keeps reading the same message over and over
                      // I need it to wait here until the client sends a new message
                      // Unless I'm just approaching this all wrong!
          NetworkMessage message = (NetworkMessage) input.readObject();
  
          NetworkMessageHeader header = message.getHeader();
  
          String headerType = header.getType();
  
          if (headerType.equals(NetworkMessageHeader.NetworkMessageHeaderTypeConnect)) {
              doLoginForMessage(message, output);
          } else if (headerType.equals(NetworkMessageHeader.NetworkMessageHeaderTypeFiles)) {
              doFilesList(message, output);
          } else {
              System.out.println("Unrecognized header type: " + headerType);
  
          }
      }
  }
  </code></pre>