Como verificar se conexão está aberta

4 respostas
M

Olá a todos!!
Tenho um servidor multi-usuário que armazena em um Map objetos socket e usuario!!
Porém, quando encerro alguma conexão, o servidor não tem o controle de remover. Tentei fazer algo assim:

while(true){
  socket = server.accept();
if (socket.isClosed()){
    mapObjeto.remove(socket);
}
}

4 Respostas

D

Cara… não ficou bem explicado o que você quer, mas acredito que você tenha que dar um

socket.close();

antes de sumir com a referência da conexão. Seria isso?! =/

Espero ter ajudado. Até.

M

É um chat!!
Bem, é que estou armazenando os usuários que estão conectados!!Assim, quando um usuário sair ou encerrar a conexão, queria automaticamente o servidor, removesse o usuário da lista!!Por enquanto, esta lista está no meu server!!
Preciso que o servidor removesse o usuário da lista, assim que o usuário fechar ou encerrar a conexão!!

D

Bem… nesse caso, você terá que colocar um tratamento na tela do seu usuário e modo a verificar se ele apertou o botão sair ou fechou o sistema/browser pelo “X” do canto superior direito.

Neste momento você pode disparar um evento, via AJAX por exemplo no caso de uma aplicação WEB, informando o servidor que o usuário desconectou. Daí você executa o “close()” e retira a referência da lista.

Outra maneira de se fazer isso seria criando uma “Task” no sistema que de tempos em tempos, verifica todos os usuários da lista, removendo os que estão inativos.

De qualquer modo, acredito que você terá que chamar o método “close()” em algum lugar. Caso contrário, acho que a conexão continuará ativa no servidor.

Espero ter ajudado. Até.

M

Não é web não!!
Task??Hum!!
Vou dar um pesquisada!!
Obrigado por enquanto!!

Criado 24 de janeiro de 2009
Ultima resposta 24 de jan. de 2009
Respostas 4
Participantes 2