Problemas com I/O

E ae galera, blz?

Estou com um prob aki.

Tenho um programa com 2 classes q consiste em :

Um server q recebe dois tipos de pedidos - 1º solicitação de um arquivo :
Verificar se o arquivo existe e retorna o conteúdo ao client.

2º atualização do arquivo, o client modifica o conteúdo e devolve o arquivo para ser salvo no server.

Segue as 2 classes :

import java.io.*;
import java.net.*;
import javax.swing.*;
import java.awt.*;

public class FileCheckerServer extends JFrame {
	private ServerSocket server;
	private Socket connection;
	private ObjectInputStream input;
	private ObjectOutputStream output;
	private JTextArea area;
	private String archieveContents = "Conteúdo do arquivo:\n";
	private File arquivo;
		
	public FileCheckerServer()
	{
		super ( "FileCheckerServer" );
			
		area = new JTextArea();
		area.setEditable ( false );
		
		getContentPane().add ( new JScrollPane ( area ),
				BorderLayout.CENTER );
		
		setSize ( 200, 200 );
		setVisible ( true );		
				
	}
	
	public void activate()
	{
		
		try {
			
			server = new ServerSocket ( 5000, 1 );
			
			while ( true ) {
				
				waitConnection();
				
				getStreams();
				
				processConnection();
				
				closeConnection();
			}
		}
		
		catch ( ClassNotFoundException cnfex ) {
			cnfex.printStackTrace();
		}
		
		catch ( EOFException eofex ) {
			System.err.println ( "Erro em EOFEX" );
		}
				
		catch ( IOException ioex ) {
			ioex.printStackTrace(); 
		}
		
	}
	
	private void waitConnection() throws IOException 
	{
		area.append ( "Espeando conecção do client\n" );
		
		connection = server.accept();
		
		area.append ( "conecção feita com " + 
				connection.getInetAddress() ); 
				
	}
	
	private void getStreams() throws IOException
	{
		output = new ObjectOutputStream ( 
				connection.getOutputStream() );
		
		output.flush();
		
		input = new ObjectInputStream ( 
				connection.getInputStream() );
	}
	
	private void processConnection() throws IOException, EOFException, 
			ClassNotFoundException
	{
		String checker = input.readLine();		
			
		if ( checker.regionMatches ( 0, "C:\"", 3, 3 ) ) {
					
			arquivo = new File ( input.readLine() );
				
			if ( arquivo.exists() ) { 
				area.append ( "Arquivo existente, enviando ao client\n" );
					
				if ( !arquivo.isDirectory() ) {
					
				BufferedReader reader = new BufferedReader ( 
						new FileReader ( arquivo ) );
					
				String temp;
					
				while ( ( temp = input.readLine() ) != null )
					archieveContents += temp + "\n";
				}
					
				else { 
					String[] conteudo = arquivo.list();
										
					for ( int i = 0; i < conteudo.length; i++ )
						archieveContents += conteudo [ i ] + "\n";
				}
			}
				
			area.append ( "\nArquivo carregado para o buffer" );
				
			output.writeObject ( archieveContents );
			output.flush();
		}
			
		else { 
			
			output = new ObjectOutputStream ( 
					new FileOutputStream ( arquivo  ) );
			
			output.reset();
			
			output.writeObject ( input.readObject() );
			
			output.flush();
				
		}
	}
	
	private void closeConnection() throws IOException
	{
		area.append ( "\nTransferência completa, fechando conecção" );
		
		input.close();
		output.close();
		connection.close();
	}
	
	public static void main ( String[] args )
	{
		FileCheckerServer app = new FileCheckerServer();
		
		app.setDefaultCloseOperation ( JFrame.EXIT_ON_CLOSE );
		
		app.activate();
	}
	
}

E o client :


import java.io.*;
import java.net.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class FileCheckerClient extends JFrame {
	private JTextField inputField;
	private JTextArea contentArea;
	private ObjectInputStream input;
	private ObjectOutputStream output;
	private String serverAddress = "localhost";
	private Socket client;
	private int choose;
	private static int ok = 1;
	private JButton atualizar;
		
	public FileCheckerClient()
	{
		super ( "FileCheckerFile" );
		
		inputField = new JTextField ( "Digite o caminho completo " +
				"ao arquivo" );
		
		inputField.addActionListener ( 
				new ActionListener()
				{
					public void actionPerformed ( ActionEvent e )
					{
						procurarArquivo( e.getActionCommand() );
					}
				}
			);
				
		getContentPane().add ( inputField, BorderLayout.NORTH );
		
		contentArea = new JTextArea();
		contentArea.setEditable ( false );
				
		getContentPane().add ( new JScrollPane ( 
				contentArea ), BorderLayout.CENTER );
		
		atualizar = new JButton ( "Atualizar Arquivo" );
		atualizar.setEnabled ( false );
		
		atualizar.addActionListener ( 
				new ActionListener()
				{
					public void actionPerformed ( ActionEvent e )
					{
						atualizarArquivo();
					}
				}
			);
		
		getContentPane().add ( atualizar, BorderLayout.SOUTH );
		
		setSize ( 400, 300 );
		setVisible ( true );
	}
	
	public void ativar()
	{
		
		try { 
			
			while ( true ) {
			
			connectServer();
			
			getStreams();

			processConnection();
			
			closeConnection();
			
			}
		}
	
		catch ( EOFException eofex ) {
			System.err.println ( "Erro no fim do arquivo [ client ] " );
		}
		
		catch ( IOException ioex ) {
			ioex.printStackTrace();
		}
		
	}
	
	private void connectServer() throws IOException 
	{
		setTitle ( "Estabelecendo conecção..." );
		
		client = new Socket ( 
				InetAddress.getByName ( 
						serverAddress ), 5000 );
		
		setTitle ( "Conecção Estabelecida com sucesso " );
	
	}
	
	private void getStreams() throws IOException 
	{
		output = new ObjectOutputStream ( 
				client.getOutputStream() );
		
		output.flush();
		
		input = new ObjectInputStream ( 
				client.getInputStream() );
		
		setTitle ( "I/O Ok" ); 
	}
	
	private void processConnection() throws IOException
	{
		contentArea.setEditable ( true );
		
		try {
			contentArea.append ( ( String ) input.readObject() );
		}
		
		catch ( ClassNotFoundException cnfex ) {
			System.err.println ( "Erro no cnfex do client" );
			cnfex.printStackTrace();
		}
							
	}
	
	private void closeConnection() throws IOException 
	{
		if ( ok < 1 ) {
			input.close();
			output.close();
			client.close();
		}
	}
	
	private void procurarArquivo ( String arquivo ) 
	{
		try { 
				
			output = new ObjectOutputStream ( 
					client.getOutputStream() );
			
			output.writeObject ( arquivo );
			output.flush();
			
			setTitle ( "Arquivo encaminhado ao Server " +
					"para busca" );
			
			contentArea.append ( "Procurando arquivo..." );
		}
		
		catch ( IOException ioex ) {
			ioex.printStackTrace();
		}
			
		atualizar.setEnabled ( true );
	}
	
	private void atualizarArquivo()
	{
		try { 
			
			String novo = contentArea.getText();
			
			output.writeObject ( novo );
			output.flush();
			
			ok = 0;
		}
		
		catch ( IOException ioex ) {
			System.err.println ( "Erro ao atualizar arquivo" );
			ioex.printStackTrace();
		}
		
		setTitle ( "Done" );
	}
	
	public static void main ( String[] args )
	{
		FileCheckerClient app = new FileCheckerClient();
		
		app.setDefaultCloseOperation ( JFrame.EXIT_ON_CLOSE );
		
		app.ativar();
	}
	
}

O server starta normalmente, os dois se conectam, porem, quando o client solicita um arquivo ( actionPerformed do inputField ) dá o seguinte erro :

java.io.StreamCorruptedException
	at java.io.ObjectInputStream$BlockDataInputStream.readBlockHeader(Unknown Source)
	at java.io.ObjectInputStream$BlockDataInputStream.refill(Unknown Source)
	at java.io.ObjectInputStream$BlockDataInputStream.read(Unknown Source)
	at java.io.DataInputStream.readLine(Unknown Source)
	at java.io.ObjectInputStream$BlockDataInputStream.readLine(Unknown Source)
	at java.io.ObjectInputStream.readLine(Unknown Source)
	at FileCheckerServer.processConnection(FileCheckerServer.java:90)
	at FileCheckerServer.activate(FileCheckerServer.java:45)
	at FileCheckerServer.main(FileCheckerServer.java:153)

ps :
Pq n dá pra recortar e colar direto do eclipse pra k ?