Bom dia pessoal, estou com um problema e gostaria de saber se alguém aqui poderia me ajudar...
bom estou criando uma conexão socket para se comunicar com rastreadores..
essa minha conexão envia e recebe dados.. trata e grava em banco..
meu chefe fez um teste e verificou que quando o rastreador é desligado e ligado bem rápido a conexão é perdida..até ai normal..
mais quando a conexão é restabelecida.. meu socket não consegue mais receber as informações, no programa de debug dele aparece que o rastreador está enviando os dados e a conexão está OK... no socket eu aceito a conexão.. mais os dados que é bom..nada eles simplesmente não aparecem..
PS: antes do rastreador ser desligado e ligado rapidamente..no teste.. ele consegue receber todas as informações..
até mesmo quando a conexão é perdida por outros motivos o rastreador volta a se conectar e envia os dados normalmente..
dei uma olhada no forum e li sobre sockets em java e vi que tem a função KeepAlive.. mais achei aqui [url]http://guj.com.br/java/269593-resolvido-sockets---saber-se-uma-ponta-fechou[/url] que tenho que implementar ela.. então eu criei uma..
mais ou menos isso:
public void KeepAlive() {
timer = new Timer(10000, new ActionListener() {
byte[] msgb = msg.getBytes();
@Override
public void actionPerformed(ActionEvent arg0) {
try {
SendkeepAlive = ServSocket.getCliente().getOutputStream();
SendkeepAlive.write(msgb);
SendkeepAlive.flush();
System.out.println("Alive!");
} catch (IOException e) {
System.err.println("Cliente [" + count + "] Desconectado!");
}
}
});
timer.start();
}
se estiver errado me avisem..
com esse método tenho a intenção de enviar uma msg de Alive para meu cliente.. a cada 10 segundos.. configurado apenas para teste..
e caso meu cliente esteja OFF ira ocorrer uma exceção, então eu fecho e abro novamente o socket..e aguardo uma conexão..
para simular um rastreador.. criei um cliente em socket também...que recebe as informações e me devolve alguma resposta... como ESTOU VIVO.
quando fecho o cliente recebo a exceção e digo que o cliente está off.
mais testando com um rastreador.. ele não funciona.. o socket continua enviando dados para o socket que não existe..
mais aqui o rastreador não me devolve nada, porque tenho que ver se fica muito complicado para o programador do rastreador estabelecer um protocolo para esse KeepAlive..
mais só o fato do socket não estar aberto.. uma exceção deveria ser criada certo ? ou não ? o certo é o cliente me devolver algo mas dessa forma já não era para funcionar ?
se alguém tiver ideia do que posso fazer ou oque estou fazendo errado.. por favor.. podem comentar! :)