Bom dia pessoal,
tenho uma aplicação que inicia um ServerSocket na porta 1000 o mesmo não tem gui… logo para fechá-lo eu estou matando o processo, só que ao fazer isto o socket e a porta continua aberta (posso verificar usando o netstat -a), então ao executar novamente a palicação ocorre uma falha pois já existe um socket com porta 1000 e não consigo reabrí-lo com a mesma porta.
Gostaria de saber como faço para ao executar o .jar verificar se já existe um socket com a porta 1000, se já existir fechar o socket (matar mesmo) e iniciar novamente.
Até…
Não faz. Esse comportamente é normal, e é o SO que cuida desse fechamento.
Na verdade, você deve setar a seguinte propriedade no seu server socket:
server.setReuseAddress(true);
antes de encerrar a aplicação, precisa esperar a thread do socket sair. Testa a conexão, e depois encerra a aplicação se não estiver mais conectado.
ok vinicius vou testar server.setReuseAddress(true); Mesmo não sabendo se vai funcionar pois estou falando do serversocket. Como faço pra verificar se a porta já está aberta?? (desculpe minha ignorância)
Julio, como eu faço uma verificação durante o ato de matar o processo?? Se a minha aplicação tivesse gui eu iria por um evento mas já que não tenho o que eu posso por?? Tem algum codigo que posso colocar no main??!
os eventos não dependem de gui. você pode sobrecarregar um método da classe socket, que lhe passe status de conexão, e então saber se pode ou não encerrar a aplicação.