首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >InetAddress.getByName不工作

InetAddress.getByName不工作
EN

Stack Overflow用户
提问于 2011-03-10 14:39:46
回答 2查看 4.6K关注 0票数 1

我正在寻找一台名为“基本”的计算机,然而,我找不到它,回来的是我的ISP的地址(所以网络访问绝对是工作的)。返回的是"Base/81.200.64.50“。基本上,它找不到名字。我在用仿真器。我使用的代码是运行在Windows上的Java代码的副本,运行良好--返回我的LAN地址。我少了什么?

守则是:

代码语言:javascript
复制
InetAddress address = InetAddress.getByName(Constants.serverNameStr);

好的-问题似乎是DNS查找。如果我将"Base“替换为"www.google.com”,我将得到74.125.230.145,即谷歌。仿真器似乎无法使用本地路由器DNS解析名称。我试过在仿真器上调整设置,但没有运气。有什么想法吗?

还尝试在模拟器的调试配置中输入LAN路由器的DNS。没有运气

EN

回答 2

Stack Overflow用户

发布于 2011-03-15 04:34:42

由于无法从InetAddress.getByName()获得任何有用的信息,我也遇到了类似的问题,但我确实发现了一些可能有用的东西:

  1. 如果您正在使用来自ISP的DNS (您可能正在使用),那么当它找不到您请求的主机时,您的ISP可能会为它的某个网站提供一个IP地址。例如,康卡斯特在找不到主机时返回真实网页的IP地址。大多数意识到这一点的人不想要这种行为,您可以通过更改主路由器中的DNS地址来指向Google的DNS服务器来修复它。使用8.8.8.8和8.8.4.4 (用于主服务器和辅助DNS服务器)。谷歌的DNS服务器通常也更快、更安全。更改路由器中的DNS服务器后,InetAddress.getByName()将在您请求找不到的主机时抛出一个UnknownHostException。如果您在主路由器上的附加设备列表中看到本地机器名称,则可能需要将".local“作为InetAddress.getByName()的参数添加到主机名中。例如,Mac笔记本电脑的主机名通常以".local“结尾,但路由器表不向用户显示。(至少,我的NetGear路由器没有显示主机名的".local“部分。)
票数 0
EN

Stack Overflow用户

发布于 2020-12-10 07:24:05

当在主线程上运行时,这种方法在Android应用程序上失败。您需要创建一个可运行的线程,类似于:-

代码语言:javascript
复制
public static class GetIPAddresses extends java.lang.Thread {
    public void run() {
        int i = 0;
        byte[][] addresses = new byte[20][];
        try {
            InetAddress[] machines = InetAddress.getAllByName("www.bing.com");
            for (InetAddress address : machines) {
                addresses[i++] = address.getAddress();
            }
        } catch (Exception e) { }
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5261253

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档