我有以下代码:
String ip = "192.168.1.1";
InetAddress address = InetAddress.getByName(ip);
在Android上执行时(是的,清单包含INTERNET)我有时会得到
java.net.UnknownHostException: Unable to resolve host "192.168.1.1": No address associated with hostname
at java.net.InetAddress.lookupHostByName(InetAddress.java:424)
at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236)
at java.net.InetAddress.getByName(InetAddress.java:289)
InetAddress上的文档表明,传入IP地址而不是主机名是完全合法的。
这里不应该进行任何DNS查找,那么出了什么问题?
编辑:
所有非常好的问题。
这不是在模拟器上运行。它在实时客户端设备上运行。当糟糕的事情发生时,我的代码会打电话给家里的电话。
我确信这是一个Wifi网络而不是3G或其他。
上面的第一行代码就是为了说明。实际代码确定Android设备在a.b.c.x本地网络上运行,并且想要确定a.b.c.1上是否有任何运行。
重点是ip变量设置为有效的IPv4地址。是否运行任何东西或Android设备甚至可以看到该地址是无关紧要的。错误消息表明不需要任何主机名解析。
还有一件事:我的应用程序每天都在世界各地运行数千次,没有任何问题。在一周内,我会收到一些错误。这意味着这段代码通常很可靠,而且这里真的很奇怪。