【问题标题】:Bonjour local host names in AndroidAndroid 中的 Bonjour 本地主机名
【发布时间】:2017-12-15 15:46:49
【问题描述】:

如何让 Android 网络请求查找在 Bonjour 注册的本地域名?

我在尝试使用 Volley 获取数据时收到此错误。

java.net.UnknownHostException: Unable to resolve host "xxxxx.local": No address associated with hostname

【问题讨论】:

标签: android bonjour


【解决方案1】:

如果您控制整个网络堆栈,您可以通过 Android 的 NsdManager 执行 DNS 服务发现 (DNS-SD)。我从文档中推荐本指南:

https://developer.android.com/training/connect-devices-wirelessly/nsd

简而言之,归结为:

mNsdManager.discoverServices(
    SERVICE_TYPE, NsdManager.PROTOCOL_DNS_SD, mDiscoveryListener);

您可以通过在 Mac 上检查来自dns-sd 的响应来交叉引用您希望解析的服务:

$ dns-sd -Z . .
_http._tcp                                      PTR     myserver._http._tcp
myserver._http._tcp                             SRV     0 0 80 myserver.local. ; Replace with unicast FQDN of target host
myserver._http._tcp                             TXT     ""

在NsdManager.DiscoveryListener回调中,可以从NsdServiceInfo.getHost()获取对应的IP地址。

【讨论】:

    【解决方案2】:

    你试过 localhost 的 IP 吗? 127.0.0.1 还是 10.0.2.2:80 ?

    【讨论】:

    • IP 有效,但对于我正在尝试做的事情并不实用。我需要使用主机名,但可以进行查找以获取 IP,然后进行网络请求。
    • InetAddress.getByName("...") 不起作用。不过感谢您的文章!
    • 投了反对票,因为问题是明确地关于查找 Bonjour 主机名。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多