Socket em java

Bom dia,
Estou com esse codigo de um servidor socket em java porem ele conecta e nao resolve nada, fica numa conexão eterna, ja bati cabeça e nada, estou querendo fazer o servidor responder cada vez que entro nele com +1 na variavel mas ele fica preso no conectado infinitamente.

package servidor;

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class Servidor {

//servidor de conexões

private ServerSocket serverSocket ;

void criarServidor(int porta) throws IOException{
serverSocket = new ServerSocket(porta);
}

Socket esperarConexao() throws IOException{
Socket socket = serverSocket.accept();
return socket;
}

void tratarConexao(Socket socket) throws IOException {

    try{
     ObjectInputStream input = new ObjectInputStream( socket.getInputStream());
     ObjectOutputStream output = new ObjectOutputStream(socket.getOutputStream());
     
        int a=0;
     
        if(a==0){
        int msg = 0;
        msg +=1; 
        System.out.println("Valor a enviar:" + msg);
        output.writeInt(msg);
        output.flush();
     
     
        input.close();
        output.close();
        a++;
        }else{
        int msg = input.readInt();
        System.out.println("Valor recebido:" + msg);
        msg +=1; 
        System.out.println("Valor a enviar:" + msg);
        output.writeInt(msg);
        output.flush();
     
     
    input.close();
    output.close();}
    }
     catch(IOException e){
         System.out.println("Problema!!");
    }finally{
        
        fechaSocket(socket);
    }

}

private void fechaSocket(Socket socket) throws IOException {
    socket.close();
}

public static void main(String[] args) {
    try{
    
    Servidor server = new Servidor();
    System.out.println("Conectando...");
    server.criarServidor(5001);
    while(true){
    Socket socket = server.esperarConexao();
    System.out.println("conectado!");
    server.tratarConexao(socket);
    System.out.println("finalizando conexao!");
    }
    
    }
    catch(IOException e){
        System.out.println("erro estranho");
    }
    
}

}