Duvida como Socket cliente verificar se conexão está ativa?

3 respostas
S

Galera possuo um socket qeu se conecta com um servidor e fica escutando recebendo varias mensagens e imprimindo o que ele for recebendo, tudo funciona bem, unico problema é.
Se o servidor por algum motivo desliga, ou é reiniciado, este socket que estava conectado não da exceção, nada de erro, continua na vida dele apenas escutando.
Gostaria de saber como posso resolver este problema, ele deve identificar que o servidor desligou e fazer novas tentativas de acesso até o servidor retornar, gerando uma nova conexão e voltando a escuta-lo.

socket = new Socket(localhost, 3000);
            socket.setSoTimeout(30000);
            in = new BufferedInputStream(socket.getInputStream());
            out = new BufferedOutputStream(socket.getOutputStream())
            try {
                do {
                    if (socket != null) {
                        if (in != null) {
                            if (in.available() > 0) {
                                while (in.available() > 0) {
                                    entrada.append((char) in.read());
                                }
                                System.out.println(entrada.toString());                            
                                entrada=new StringBuilder();
                            } else {
                                this.sleep(5000);
                            }
                        }
                    }                    
                } while (true);
            } catch (Exception e) {
                e.printStackTrace();
            }

Valeu!

3 Respostas

B

Só há uma maneira eficaz de fazer isso: definir em seu protocolo de comunicação uma mensagem de “ping” ou “echo”. Por exemplo, um cliente pode enviar periodicamente uma mensagem que você definiu como “ping” e o servidor tem de responder com uma mensagem “pong”. Se o servidor não responder com “Pong” dentro de um determinado tempo que você estipular, pode considerar que o servidor está fora do ar.

V

Essa demora é culpa do próprio funcionamento do TCP/IP. Como o protocolo foi feito para operar em redes de baixíssimo tempo de resposta (como era o caso da internet nos anos 80), o tempo que ele leva para identificar a queda pode ser longo demais.

Um algoritmo de KEEP_ALIVE, como o bezier falou, é mesmo a melhor saída.

S

O problema é que o servidor não tenho acesso, é um produto pronto que estou gerando a conexão, então este lance de ping pong não vai dar se lá não estiver implementado, achei que tinha algo mais fácil para se usar, mas blz!

Criado 27 de outubro de 2010
Ultima resposta 27 de out. de 2010
Respostas 3
Participantes 3