1. Introduction
In this tutorial, we'll learn the cause of UnknownHostException with an example. We'll also discuss possible ways of preventing and handling the exception.
2. When is the Exception Thrown?
UnknownHostException indicates that the IP address of a hostname could not be determined. It can happen because of a typo in the hostname:
String hostname = "http://locaihost"; URL url = new URL(hostname); HttpURLConnection con = (HttpURLConnection) url.openConnection(); con.getResponseCode();
The above code throws an UnknownHostException since the misspelled locaihost doesn't point to any IP addresses.
Another possible reason for UnknownHostException is DNS propagation delay or DNS misconfiguration.
It might take up to 48 hours for a new DNS entry to be propagated all around the Internet.
3. How to Prevent It?
Preventing the exception from occurring in the first place is better than handling it afterward. A few tips to prevent the exception are:
- Double-check the hostname: Make sure there is no typo, and trim all whitespaces.
- Check the system's DNS settings: Make sure the DNS server is up and reachable, and if the hostname is new, wait for the DNS server to catch up.
4. How to Handle It?
UnknownHostException extends IOException, which is a checked exception. Similar to any other checked exception, we must either throw it or surround it with a try-catch block.
Let's handle the exception in our example:
try { con.getResponseCode(); } catch (UnknownHostException e) { con.disconnect(); }
It's a good practice to close the connection when UnknownHostException occurs. A lot of wasteful open connections can cause the application to run out of memory.
5. Conclusion
In this article, we learned what causes UnknownHostException, how to prevent it, and how to handle it.
As always, the code is available over on Github.