【问题标题】:Android java.net.UnknownHostException: Host is unresolved (strategy question)Android java.net.UnknownHostException: Host is unresolved (strategy question)
【发布时间】:2010-07-20 19:34:36
【问题描述】:

我的 android 代码使用后台进程定期(例如每小时)连接到网络上的内容源以检查更新的内容。当新用户第一次下载应用程序并运行它时,在第一次运行的情况下(这只是“目前看来”),因为我们服务器的 DNS 尚未缓存在设备上,那些第一系列连接失败并出现可怕的 UnknownHostException: Host is unresolved. 当然,应用程序稍后再试一次并且(再次,“看起来”)它一切正常——也许是因为操作系统有时间实际解决地址。

所以,我的问题是:(1) 其他 Android 开发人员是否也看到他们部署的应用程序的这种行为?第一次,一系列“主机未解决”的问题后来自行解决。 (2) 可以这么说,有没有人有更好的“预热 DNS”策略,以便第一个真正的连接起作用?或者当您遇到此异常时,您是否只是重新尝试一些退避循环?我正在考虑有一个单独的线程尝试从我们的服务器获取一个小文本文件并让它循环直到它得到它并且可能(不确定这部分)阻止其他传出网络连接直到它成功。

无论如何,我已经阅读了 Stack Overflow 上各种措辞相似的问题的大部分答案,我只是向大家保证

<uses-permission android:name="android.permission.INTERNET" />

在我的清单文件中设置:)

【问题讨论】:

  • 我们遇到了同样的问题。为了分析它,我们实现了一个将数据包发送到默认 dns (8.8.8.8) 的 icmp ping。我们观察到的是,即使 ip-ping 测试成功(因此 Internet 连接可用),我们仍然遇到 UnknownHostException。知道这可能是什么原因吗?

标签: java android


【解决方案1】:

我在使用 HttpUrlConnection 时遇到了这种行为。我正在使用简单的解决方法 - 我在使用任何 url 之前执行以下代码。

    try {
      InetAddress i = InetAddress.getByName(URLName);
    } catch (UnknownHostException e1) {
      e1.printStackTrace();
    }
// ... actually using URLName

我第一次在此处获得 UnknownHostException 但该 url 的下一次使用成功(DNS 服务器返回正确的 IP 地址,我可以连接到服务器)。

【讨论】:

  • 非常有趣的想法,巴特。作为记录,我们使用的是 HttpUrlConnection。谢谢!我会试试看,看看我们是否发现异常数量减少了。
  • 昨晚我在使用 google 搜索 api 时遇到了同样的问题...它不断返回 host not found...知道是什么原因造成的吗?
  • 我也遇到过这种情况,但本着其他人遇到问题的精神,他们可能希望听到我的问题是由于 SD 卡不存在且没有本地存储导致我的主机出现此未解决的错误BufferedInputStream(urlConnection.getInputStream()) 调用。
  • 但如果您连接到无线但调制解调器已关闭,或者您可以说您已连接到网络但没有数据传输或某些提供商问题,它会给出相同的例外。那么如果最初主机不存在,我如何区分这种情况与情况。
猜你喜欢
  • 1970-01-01
  • 2014-06-12
  • 2014-08-11
  • 2022-12-27
  • 2012-01-13
  • 2020-01-18
  • 1970-01-01
  • 2010-11-19
  • 1970-01-01
相关资源
最近更新 更多