[Resolvido]Dúvida fechamento de socket ao perder conexão

Tenho a seguinte estrutura

private Socket sockCliente;
private DataInputStream entrada;
private DataOutputStream saida;

private void conectar() throws Exception{
        if(sockCliente==null || sockCliente.isClosed()){
            sockCliente = new Socket(VariaveisGlobais.IP_SERVIDOR_C, VariaveisGlobais.PORTA_SERVIDOR_C);
            entrada = new DataInputStream(sockCliente.getInputStream());
            saida = new DataOutputStream(sockCliente.getOutputStream());
            
            System.out.println("Reconectou servidor C");
        }else{
            System.out.println("Já conectado servidor C!");
        }
}

private void fecharConexao(){
        try{
            entrada.close();
            saida.close();
            sockCliente.close();
        }catch(Exception e){}
}

private void enviaMensagemServidorC(String mensagem) throws Exception{
        saida.writeUTF(mensagem);
        saida.flush();
        System.out.println("Enviado para Servidor C: "+mensagem);
}

private Integer lerMensagemServidorC() throws IOException {
            String mensagem;
            while((mensagem = entrada.readUTF()) != null){
                System.out.println("Recebido Servidor C: "+mensagem);
                return mensagem;
            }
            return null;
}

Sendo que faço assim para chama-las

conectar();
enviaMensagemServidorC(meuComando);
return lerMensagemServidorC();

e mantenho minha conexão aberta ao termino. Quando executo essa operação 1 ou mais vezes e meu servidor em C por acaso para de executar, ao passar pelo método conectar() ele não cai dentro do if lançando uma SocketException ao tentar enviar mensagem para o servidor(linha 26). Sei que existe cambiara para corrigir isso até fiz, mais queria saber se ao perder conexão porque o método sockCliente.isClosed() ainda continua como true? Não deveria ser false? Ou existe outro método para fazer essa verificação?
Obrigado a todos!

A palavra é “gambiarra”, não “cambiara” (“gambiarra” é a iluminação teatral, e fica acima da “ribalta”. Por extensão, quer dizer também algo improvisado). “Cambiara” é um tempo do verbo “cambiar” (“mudar”), ou seja, equivale a “mudara”.

Socket.isClosed indica se você chamou o método close antes, não se você perdeu a conexão. (Realmente a documentação é lamentável :frowning: )

Na verdade, não há métodos muito confiáveis para checar se o socket está realmente disponível para uso.

Portanto você tem de tentar escrever, e se houver uma exceção, deve tratar.

Okay, achei q existia outra forma sem ter que usar os metodos de entrada e saida.