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.

  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).

  2. Qual é a diferença entre o "System.err.println" e "System.println"?

  3. Na declaração de captura, temos "e". Pelo que? Nós o usamos último?

Foi útil?

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"

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top