An UnknownHostException的快速指南,如果在为远程方法调用创建到远程主机的连接时发生java.net.UnknownHostException,则会抛出该快速指南。 UnknownHostException的预防方法。
1.简介
在本教程中,我们将学习什么是UnknownHostException以及产生它的原因 。 并且学习如何预防 。 UnknownHostException是一个常见的异常,它将显示防止该异常的最佳方法。
层次结构:
java.lang.Object java.lang.Throwable java.lang.Exception java.io.IOException java.rmi.RemoteException java.rmi.UnknownHostException
2.何时引发异常?
当且仅当域名存在问题或键入错误时,才会引发UnknownHostException 。 并且还指示无法确定网站的IP地址。
package com.java.w3schools.blog.exceptions; import java.io.IOException; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; public class UnknownHostExceptionException { public static void main(String[] args) throws IOException { String hostname = " http://javaprogram.comm " ; URL url = null ; try { url = new URL(hostname); } catch (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); } HttpURLConnection con = (HttpURLConnection) url.openConnection(); con.getResponseCode(); } }
输出:
Exception in thread "main" Exception in thread java.net.UnknownHostException: javaprogram.comm at java.base/java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java: 220 ) at java.base/java.net.Socket.connect(Socket.java: 591 ) at java.base/java.net.Socket.connect(Socket.java: 540 ) at java.base/sun.net.NetworkClient.doConnect(NetworkClient.java: 182 ) at java.base/sun.net.www.http.HttpClient.openServer(HttpClient.java: 474 ) at java.base/sun.net.www.http.HttpClient.openServer(HttpClient.java: 569 ) at java.base/sun.net.www.http.HttpClient.<init>(HttpClient.java: 242 ) at java.base/sun.net.www.http.HttpClient.New(HttpClient.java: 341 ) at java.base/sun.net.www.http.HttpClient.New(HttpClient.java: 362 ) at java.base/sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java: 1242 ) at java.base/sun.net.www.protocol.http.HttpURLConnection.plainConnect0(HttpURLConnection.java: 1181 ) at java.base/sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java: 1075 ) at java.base/sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java: 1009 ) at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java: 1581 ) at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java: 1509 ) at java.base/java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java: 527 ) at com.java.w3schools.blog.exceptions.UnknownHostExceptionException.main(UnknownHostExceptionException.java: 21 )
在上面的程序中错误地添加了comm而不是com。 因此,它产生了错误。
3.如何预防?
预防胜于治疗。 始终将预防放在首位,而不是面对问题。
以下是预防的重要提示。
仔细检查主机名 –检查域名的拼写并修剪多余的空格是很好的。
检查DNS设置 –在运行应用程序之前,使用计算机上的ping hostname命令确保DNS服务器已启动并正在运行。 如果主机名是新的,则需要等待一段时间才能访问DNS服务器。
4.如何处理?
UnknownHostException扩展了IOException ,这是一个已检查的异常。 类似于任何其他检查的异常,我们必须将其抛出或用try-catch块将其包围。
让我们在示例中处理异常:
try { con.getResponseCode(); } catch (UnknownHostException e) { con.disconnect(); }
Thread.sleep(5000) –睡眠一段时间,然后重试。 如果存在网络问题,这应该可以解决该问题。 代替睡眠不要使用interrupted()方法。
发生UnknownHostException时,关闭连接是一个好习惯。 许多浪费的打开连接会导致(内存泄漏)应用程序用尽内存。
5.结论
在本文中,我们已经看到了什么是UnknownHostException以及如何产生和处理它? 并且还看到了预防这种情况的最佳方法。
GitHub示例代码
API
翻译自: https://www.javacodegeeks.com/2020/04/java-unknownhostexception-invalid-hostname-for-server-how-to-fix-it.html