Posso ter exceção de IO quando crio um soquete de servidor em Java?
-
21-09-2019 - |
Pergunta
Eu tenho o seguinte código:
Socket clientSocket = null;
try {
clientSocket = serverSocket.accept();
} catch (IOException e) {
System.err.println("Accept failed.");
System.exit(1);
}
O código é retirado de um java.sun.com.
Tenho várias perguntas sobre a parte acima dada a parte do código.
Por que queremos pegar uma ioexception. Eu pensei que a ioexception é algo que pode acontecer quando usamos métodos de entrada e saída (não métodos de rede).
Qual é a diferença entre o "System.err.println" e "System.println"?
Na declaração de captura, temos "e". Pelo que? Nós o usamos último?
Solução
1: Por que queremos pegar uma ioexception. Eu pensei que a ioexception é algo que pode acontecer quando usamos métodos de entrada e saída (não métodos de rede).
A rede também é entrada/saída. Bytes fluem através de um soquete.
2: Qual é a diferença entre o "System.err.println" e "System.println"?
O primeiro escreve para stderr, o segundo não existe.
3: Na declaração de captura, temos "e". Pelo que? Nós o usamos último?
Para ter uma referência à exceção para que você possa, se necessário, log ou repensar -o.
Outras dicas
(a) Você não está 'criando um soquete do servidor' neste código, está aceitando um soquete de um ServerSocket.
(b) isso pode falhar por muitos motivos, incluindo o fechamento do ServerSocket; ficando sem FDS; problemas de pilha de rede; exaustão da memória; ... então joga ioexception.
Um motivo comum para aceitar jogar uma ioexception está ficando sem alças de arquivo. Ele precisa de duas alças de arquivo para criar o soquete e, se você acabar, recebe um erro como "muitos arquivos abertos"