KeepAlive continua enviando dados mesmo com o Socket fechado!

0 respostas
M

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! :)

Criado 30 de outubro de 2012
Respostas 0
Participantes 1