Aos 10:44 quando é chamado o método servidor.parar() a variável de controle no laço while muda para false, então por que assim ele entra no bloco e tenta aceitar aceitar a conexão gerando a excessão?
Aos 10:44 quando é chamado o método servidor.parar() a variável de controle no laço while muda para false, então por que assim ele entra no bloco e tenta aceitar aceitar a conexão gerando a excessão?
Eu acho que entendi...é que é muito rápido ele pode ter fechado o socket no meio tempo entre entrar no while e executar a inha do socket.accept() será que é isso?
Se for bah que loucura haha é muita coisa assícrona...perdemos o controle hehe
Olá Guilherme, tudo bem?
Sim, quando a variável de controle no laço while é alterada para false, o loop é encerrado e o método servidor.parar() é chamado para fechar o socket do servidor. No entanto, pode ocorrer que entre o momento em que a variável é alterada e o momento em que o método servidor.parar() é chamado, um novo cliente possa tentar se conectar ao servidor. Nesse caso, a linha socket.accept() será executada novamente, gerando uma exceção.
Essa é uma das peculiaridades da programação concorrente e assíncrona. Quando lidamos com múltiplas threads e eventos que ocorrem simultaneamente, é necessário pensar em todas as possíveis interações entre eles e garantir que o código seja seguro e robusto. É um desafio, mas também é o que torna a programação concorrente tão poderosa e eficiente em determinados cenários.É importante lembrar que, ao fechar um socket, é necessário garantir que todas as conexões existentes também sejam fechadas antes de encerrar o servidor.
Para evitar esse problema, você pode implementar um mecanismo de controle de conexões, que garanta que todas as conexões sejam fechadas antes de encerrar o servidor. Uma opção é manter uma lista de todos os sockets abertos e percorrer essa lista ao fechar o servidor, fechando um por um.
Espero ter ajudado e bons estudos!
"Uma opção é manter uma lista de todos os sockets abertos e percorrer essa lista ao fechar o servidor, fechando um por um."
Boa!