Ciao a tutti!

Mi stò avvicinando alla programmazione client server e vorrei provare a scrivere una applicazione che utilizza le socket per trasmettere degli oggetti tramite la rete LAN.
Ho iniziato a guardare i tutorial sul mio sito preferito (java.sun.com ) e ho provato a buttare giù un paio di righe di codice.
Ho implementato una classe dal nome Message (implements serializable)il cui costruttore crea un oggetto contenente una stringa:
codice:
public Message (String message ) {
    this.message = message;
  }
Poi ho creato una classe Server che entra in un loop infinito in cui si occupa di accettare una connessione in entrata (serverSocket server = new ServerSocket(1428) e di lanciare un thread per ogni client accettato.
Ogni thread ha il compito di leggere il messaggio del client, stamparlo sullo standard output e mandargli un oggetto che contiene la stringa "messaggio ricevuto".
Il fatto è che dopo aver ricevuto il primo messaggio e spedito il messaggio predefinito, mi esce con un errore, mentre il client continua a funzionare.
Qualcuno ha idea di cosa possa essere?Il codice allegato è corretto?
Mi sapreste dare dei consigli su come procedere per scambiare dei messaggi tra server e client facendo in modo che il server aspetti un messaggio prima di continuare con la sua esecuzione?
Vi allego degli stralci del codice che ho scritto(metto solo le parti significative):

Server:
codice:
  public static final int porta = 1428;

  public Server () throws IOException {
    ServerSocket server = new ServerSocket (porta);
    while (true) {
      Socket client = server.accept();
      System.out.println("Connection Accepted");
      Thread connection = new ServerThread ( client.getInputStream() , client.getOutputStream() );
      connection.start();
    }
Thread del Server:
codice:
public class ServerThread extends Thread {
  private ObjectInputStream input;
  private ObjectOutputStream output;

  public ServerThread (InputStream is, OutputStream os) {
  	try {
  		input = new ObjectInputStream ( is );
 	 	output = new ObjectOutputStream ( os );
 	 } catch ( Exception e) {
 	 	System.err.println ("Errore nel costruttore del Thread del Server: " + e );
 	 }
  }

  public void run () {
  	try {
   		while (true) {
   			System.out.println ("Leggo il messaggio in input e la stampo a video");
   			String Messaggio = ( ((Message) input.readObject() ).getMessage() );
   	 		System.out.println(Messaggio);
   	 		System.out.println ("Provo a inviare un messaggio");
	   	 	Message conferma = new Message ("Messaggio ricevuto!");
 	  	 	output.writeObject (conferma);
  	 	 	output.flush();
  	 	 	System.out.println ("Svuotato il buffer di output,adesso riparto!");  	 	 	
  	 	}
  	} catch (Exception e) {
  		System.err.println ("Errore nel Thread del Server: "+ e );
  	}
 }