Rukovanje java.net.ConnectException

1. Uvod

U ovom brzom vodiču razgovarat ćemo o nekim mogućim uzrocima java.net.ConnectException. Zatim ćemo pokazati kako provjeriti vezu uz pomoć dvije javno dostupne naredbe i malog primjera Jave.

2. Što uzrokuje java.net.ConnectException

The java.net.ConnectException iznimka je jedna od najčešćih Java iznimki vezanih uz umrežavanje. Mogli bismo ga susresti kada uspostavljamo TCP vezu iz klijentske aplikacije na poslužitelj. Budući da je riječ o provjerenoj iznimci, trebali bismo s njom pravilno postupati u našem kodu u a pokušaj uhvatiti blok.

Mnogo je mogućih uzroka ove iznimke:

  • Poslužitelj s kojim se pokušavamo povezati jednostavno nije pokrenut, stoga ne možemo uspostaviti vezu
  • Kombinacija hosta i porta koju koristimo za povezivanje s poslužiteljem možda je netočna
  • Vatrozid može blokirati veze s određenih IP adresa ili priključaka

3. Programsko hvatanje iznimke

Obično se na poslužitelj povezujemo programski pomoću java.net.Utičnica razred. Da bismo uspostavili TCP vezu, moramo provjerite povezujemo li se s ispravnom kombinacijom hosta i porta:

Niz hosta = "localhost"; int port = 5000; pokušajte {Socket clientSocket = nova utičnica (host, port); // učiniti nešto s uspješno otvorenom utičnicom clientSocket.close (); } catch (ConnectException e) {// kombinacija domaćina i porta nije važeća e.printStackTrace (); } catch (Iznimka e) {e.printStackTrace (); }

Ako je kombinacija hosta i porta netočna, Utičnica bacit će a java.net.ConnectException. U našem gornjem primjeru koda ispisujemo trag steka kako bismo bolje utvrdili što ide po zlu. Nema vidljivog praćenja steka znači da se naš kôd uspješno povezao s poslužiteljem.

U tom bismo slučaju trebali provjeriti detalje veze prije nastavka. Također bismo trebali provjeriti da naš vatrozid ne sprječava vezu.

4. Provjera povezanosti s CLI-jem

Kroz CLI možemo koristiti ping naredba za provjeru radi li poslužitelj s kojim se pokušavamo povezati.

Na primjer, možemo provjeriti je li pokrenut Baeldung poslužitelj:

ping baeldung.com

Ako je poslužitelj Baeldung pokrenut, trebali bismo vidjeti informacije o poslanim i primljenim paketima.

PING baeldung.com (104.18.63.78): 56 bajtova podataka 64 bajta od 104.18.63.78: icmp_seq = 0 ttl = 57 vrijeme = 7.648 ms 64 bajta od 104.18.63.78: icmp_seq = 1 ttl = 57 vrijeme = 14.493 ms

telnet je još jedan koristan CLI alat koji možemo koristiti za povezivanje na određeni host ili IP adresu. Uz to, možemo proći i točan priključak koji želimo testirati. Inače će se koristiti zadani port 23.

Na primjer, ako se želimo povezati s web mjestom Baeldung na portu 80, možemo pokrenuti:

telnet baeldung.com 80

Vrijedno je to napomenuti ping i telnet naredbe možda neće uvijek raditi - čak i ako poslužitelj do kojeg pokušavamo doći radi i koristimo ispravnu kombinaciju hosta i porta. To je često slučaj u proizvodnim sustavima, koji su obično jako zaštićeni kako bi se spriječio neovlašteni pristup. Osim toga, vatrozid koji blokira određeni internetski promet mogao bi biti još jedan uzrok kvara.

5. Zaključak

U ovom smo brzom vodiču razgovarali o uobičajenoj iznimci Java mreže, java.net.ConnectException.

Počeli smo s objašnjenjem mogućih uzroka te iznimke. Pokazali smo kako programski uhvatiti iznimku, zajedno s dvije korisne CLI naredbe koje bi mogle pomoći u utvrđivanju uzroka.

Kao i uvijek, kod prikazan u ovom članku dostupan je na GitHub-u.