Gestione di java.net.ConnectException

1. Introduzione

In questo breve tutorial, discuteremo alcune possibili cause di java.net.ConnectException . Quindi, mostreremo come controllare la connessione con l'aiuto di due comandi disponibili pubblicamente e un piccolo esempio Java.

2. Che cosa causa java.net.ConnectException

L' eccezione java.net.ConnectException è una delle eccezioni Java più comuni relative al networking. Potremmo riscontrarlo quando stabiliamo una connessione TCP da un'applicazione client a un server. Poiché si tratta di un'eccezione controllata, dovremmo gestirla correttamente nel nostro codice in un blocco try-catch .

Ci sono molte possibili cause di questa eccezione:

  • Il server a cui stiamo tentando di connetterci semplicemente non è avviato, quindi non possiamo ottenere una connessione
  • La combinazione di host e porta che stiamo utilizzando per connetterci al server potrebbe non essere corretta
  • Un firewall potrebbe bloccare le connessioni da porte o indirizzi IP specifici

3. Catturare l'eccezione al livello di programmazione

Di solito ci colleghiamo al server in modo programmatico utilizzando la classe java.net.Socket . Per stabilire una connessione TCP, dobbiamo assicurarci di connetterci alla corretta combinazione di host e porta:

String host = "localhost"; int port = 5000; try { Socket clientSocket = new Socket(host, port); // do something with the successfully opened socket clientSocket.close(); } catch (ConnectException e) { // host and port combination not valid e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); }

Se la combinazione host e porta non è corretta, Socket genererà un'eccezione java.net.ConnectException. Nel nostro esempio di codice sopra, stampiamo la traccia dello stack per determinare meglio cosa non va. Nessuna traccia dello stack visibile significa che il nostro codice si è connesso correttamente al server.

In questo caso, dovremmo controllare i dettagli della connessione prima di procedere. Dovremmo anche verificare che il nostro firewall non stia impedendo la connessione.

4. Verifica delle connessioni con la CLI

Tramite la CLI, possiamo utilizzare il comando ping per verificare se il server a cui stiamo tentando di connetterci è in esecuzione .

Ad esempio, possiamo verificare se il server Baeldung è avviato:

ping baeldung.com

Se il server Baeldung è in esecuzione, dovremmo vedere le informazioni sui pacchetti inviati e ricevuti.

PING baeldung.com (104.18.63.78): 56 data bytes 64 bytes from 104.18.63.78: icmp_seq=0 ttl=57 time=7.648 ms 64 bytes from 104.18.63.78: icmp_seq=1 ttl=57 time=14.493 ms

telnet è un altro utile strumento CLI che possiamo utilizzare per connetterci a un host o indirizzo IP specificato. Inoltre, possiamo anche passare una porta esatta che vogliamo testare. In caso contrario, verrà utilizzata la porta predefinita 23.

Ad esempio, se vogliamo connetterci al sito web di Baeldung sulla porta 80, possiamo eseguire:

telnet baeldung.com 80

Vale la pena notare che i comandi ping e telnet potrebbero non funzionare sempre, anche se il server che stiamo cercando di raggiungere è in esecuzione e stiamo utilizzando la combinazione corretta di host e porta. Questo è spesso il caso dei sistemi di produzione, che di solito sono fortemente protetti per impedire l'accesso non autorizzato. Inoltre, un firewall che blocca il traffico Internet specifico potrebbe essere un'altra causa di errore.

5. conclusione

In questo breve tutorial, abbiamo discusso l'eccezione di rete Java comune, java.net.ConnectException .

Abbiamo iniziato con una spiegazione delle possibili cause di tale eccezione. Abbiamo mostrato come catturare l'eccezione a livello di codice, insieme a due utili comandi CLI che potrebbero aiutare a determinare la causa.

Come sempre, il codice mostrato in questo articolo è disponibile su GitHub.