Enviar mensagem para servidor socket atraves do swing

ae gente estou precisando de ajuda aq estou aprendendo sobre sockets agora e minha professora me deu uma tarefa pra fazer ela me passou um codigo cliente/servidor para que eu implementa-se, blz o que acontece e o seguinte se eu rodar esses codigos no console ele funciona direito envia varias mensagem do console do cliente para o servidor so que quando eu crie uma janela no swing
e fiz o metodo para pegar a mensagem do textArea ele so envia uma mensagem nao consigo enviar +, quando eu fecho essa janela aparece o erro

SocketException: conncetion reset
no servidor

por favor se alguem puder me ajudar agradeço


package Servidor;

import java.io.EOFException;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

import javax.swing.JOptionPane;

/**
 *
 * @author Romario
 */
public class ServidorMSN implements Runnable {

    private ServerSocket servidor;
    private Socket conexao;
    private int count = 1;
    private ObjectOutputStream output;
    private ObjectInputStream input;
    
    String threadName;
    private static ExecutorService executaThread = Executors.newFixedThreadPool(1);

    // metodo construtor do servidor
    public ServidorMSN(int porta, int fila, String nome) {


        try {
            threadName = nome;
            servidor = new ServerSocket(porta, fila);

        } catch (Exception ex) {
            JOptionPane.showMessageDialog(null, "Erro de conexao com o cliente" + ex.toString());
            ex.printStackTrace();
        }
    }

    /***************************************************************************************
     * Efetua o tratamento para deixar o cliente conectado com o servidor                  *
     **************************************************************************************/
    /***************************************************************************************
     * Runnable tem apenas um metodo a implementar: public void run () (sem argumentos)
     * e ai que iserira a tarefa que o segmento deve executar.esse é o metodo que entrara
     * no final da pilha
     **************************************************************************************/
    public void run() {
        System.out.printf("thread %s start ...\n", this.threadName);


        try {

            while (true) {
                //Passo 2: Espera uma conexao
                System.out.println("\nEsperando Conexão...\n");
                conexao = servidor.accept();


                System.out.println("\nConexão " + count + " recebido de: " + conexao.getInetAddress().getHostName());

                //Passo 3: obtendo os fluxos de entrada e saída
                input = new ObjectInputStream(conexao.getInputStream());

                output = new ObjectOutputStream(conexao.getOutputStream());
                output.flush();


//                input = new ObjectInputStream(conexao.getInputStream());
                System.out.println("\n Pegando streams de entrada e saída\n");

                //Passo 4: Processando conexão com cliente


                
                try {
                    String menssage = "";
                    while ((menssage = (String) input.readObject()) != null) {
                        try {
                            output.writeObject(menssage);
                            output.flush();
                            System.out.println(menssage);

                        } catch (Exception e) {
                            System.out.println("\n Objeto recebido desconhecido - ERRO!!");
                            e.printStackTrace();
                        }

                    }
                    //Passo 5: Fecha a conexão
                    //                System.out.println("\n FIM DE CONEXÃO COM CLIENTE " + conexao.getInetAddress().getHostName());
                    //                ++count;

                } catch (ClassNotFoundException ex) {
                    ex.printStackTrace();
                }
            }
        } catch (EOFException eof) {
            System.out.println("\nFim da conexão com cliente\n");
            eof.printStackTrace();
        } catch (IOException io) {
            io.printStackTrace();


        } finally {
            try {
                output.close();
                input.close();
                conexao.close();
                Thread.interrupted();

            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    /********************************************************************************
     * Método utilizado para o envio de mensagem para um servidor                   *
     *******************************************************************************/
    public static void main(String[] args) {
        ServidorMSN s = new ServidorMSN(5000, 100, "Servidor teste");
        executaThread.execute(s);



    }
}

o erro ta acontecendo na linha 81

se alguem puder me dizer pelo menos o erro ae do conncetion reset