Nio (selecionar (lidar com a desconexão do cliente (com evento de leitura)))
Antes de tudo, precisamos ter um entendimento: se nosso cliente for forçado a parar ou desconectado normalmente, um evento de leitura será acionado (somente o valor retornado por read que é desconectado normalmente é -1)
Etapa 1: Paramos o cliente à força
Ocorreu uma exceção no servidor (porque nosso cliente foi forçado a fechar e nosso cliente terá uma exceção io se quiser ler novamente)
Passo 2: Método de processamento (vamos tentar capturar a exceção primeiro) ctrl+alt+T tecla de atalho
Neste momento, o servidor está em execução, mas o servidor não parou
Porque após capturarmos a exceção, a exceção entrará no loop externo e um evento de leitura será acionado após o cliente ser forçado a parar (entrando em nossa coleção), mas não processamos essa chave. Se não houver processamento, o método select não será bloqueado (executando o tempo todo)
Etapa 3: otimizar novamente (vamos excluir essa chave da coleção)
Não há problema aqui, nosso aqui é imprimir uma exceção (e.printS...)
Passo 4: Existe outro problema, o cliente é desconectado normalmente (o servidor não pode parar), pois também vamos gerar um evento de leitura quando desconectado normalmente, e não será pego pela exceção, então essa chave normal não irá deletado
Otimização: distinguimos entre desconexão normal e desconexão anormal. A maneira de pensar é que, quando desconectamos normalmente, leia retorna -1 para julgar