Java UnknownHostException –服务器的无效主机名–如何解决?

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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值