如何使用NsdManager来检测专用网络上的模拟设备?

时间:2018-08-23 19:39:44

标签: java android mdns zeroconf

我目前正在使用一个移动应用程序,该应用程序可以发现并解析专用网络上的设备。该应用程序目前可以完美运行,可以让我将插座连接到该设备。

现在,我正在研究一项在OSHA批准之前无法合法实现的功能。因此,为了解决这个问题,我们模拟了可以代替实际物理设备使用的设备。该模拟器可在使用bonjour的Windows平板电脑上运行,但是我的应用使用Android的NsdManager的应用程序会发现该模拟设备并尝试对其进行解析,但我从未收到对resolveService()的调用的响应。 onResolveFailedonServiceResolved都不被调用。使用实际的物理设备,该应用程序可以正常运行。

是否存在任何已知问题可能会导致此问题不适用于仿真设备?或者也许我可以寻找其他解决方案呢?

编辑
因此,为了使其正常工作,应用程序和Windows笔记本电脑都连接到了WiFi路由器,因此笔记本电脑和手机/平板电脑可以位于同一网络上。这是通过WiFi路由器连接到该笔记本电脑上的仿真设备时的日志:

08-24 08:35:04.428 12514-12625 / com.tsi.fitpro D / ZeroConf:有关解决服务的问题。
08-24 08:35:04.431 455-1484 /? D / MDnsDS:resolveService(18,(null),仿真器名称,_telnet._tcp。,本地。)
08-24 08:35:04.433 455-1484 /? D / MDnsDS:startMonitoring 18     触发重新扫描     resolveService成功
08-24 08:35:04.433 455-1483 /? D / MDnsDS:监控器轮询得到的数据pollCount = 2,1
08-24 08:35:04.434 455-1483 /? D / MDnsDS:controlSocket显示revent = 1
    MDnsSdListener :: Monitor得到1
    MDnsSdListener :: Monitor轮询重新扫描-size = 15,live = 2
    用pollCount 3进行投票
    监视器民意测验得到的数据pollCount = 3,1
    找到监视器1。revents = 1-调用ProcessResults
    解决成功的18找到模拟器名称._telnet._tcp.local。位于LaptopName.:3603,带有txtLen 1
    controlSocket显示revent = 0
    用pollCount 3进行投票
08-24 08:35:04.437 783-1663 /? E / NsdServiceInfo:解析txt记录(pos = 1)时:零大小的txt记录
08-24 08:35:04.438 455-1484 /? D / MDnsDS:使用参考0xb300c52c停止解析
    freeServiceRef 18
    触发重新扫描
08-24 08:35:04.438 455-1483 /? D / MDnsDS:监控轮询获得的数据pollCount = 3,2
    找到监视器1。revents = 32-调用ProcessResults
08-24 08:35:04.439 455-1483 /? W // system / bin / netd:使用无效的DNSServiceRef调用dnssd_clientstub DNSServiceProcessResult 0xb3029070 FFFFFFFF DDDDDDDD
08-24 08:35:04.439 455-1483 /? D / MDnsDS:controlSocket显示revent = 1
    MDnsSdListener :: Monitor得到1
    MDnsSdListener :: Monitor轮询重新扫描-大小= 15,实时= 1
    用pollCount 2进行投票
08-24 08:35:04.443 455-1484 /? D / MDnsDS:getAddrInfo(19,(null)0,LaptopName。)
    startMonitoring 19
    触发重新扫描
    getAddrInfo成功
08-24 08:35:04.443 455-1483 /? D / MDnsDS:监控器轮询得到的数据pollCount = 2,1
    controlSocket显示revent = 1
08-24 08:35:04.444 455-1483 /? D / MDnsDS:MDnsSdListener :: Monitor得到1
    MDnsSdListener :: Monitor轮询重新扫描-size = 15,live = 2
    用pollCount 3进行投票
08-24 08:35:04.883 783-783 /? D / WifiTrafficPoller:notifyOnDataActivity()-mBusMaxLock.acquire()
08-24 08:35:05.232 783-1630 /? D / wifi:onLinkStats结果:radio_stat.on_time = 9651912
    onLinkStatsResults:radio_stat.tx_time = 0
    onLinkStatsResults:radio_stat.rx_time = 0
    android_net_wifi_getLinkLayerStats:radio_stat.on_time = 9651912
    android_net_wifi_getLinkLayerStats:radio_stat.tx_time = 0
    android_net_wifi_getLinkLayerStats:radio_stat.rx_time = 0

这是通过WiFi路由器连接到实际设备的日志。这行得通。

08-24 08:47:55.744 19492-19583 / com.tsi.fitpro D / ZeroConf:实际设备名称
    即将解决服务。
08-24 08:47:55.747 455-1484 /? D / MDnsDS:resolveService(21,(空),实际设备名称,_telnet._tcp。,本地。)
08-24 08:47:55.749 455-1484 /? D / MDnsDS:startMonitoring 21
    触发重新扫描
    resolveService成功
08-24 08:47:55.749 455-1483 /? D / MDnsDS:监控器轮询得到的数据pollCount = 2,1
    controlSocket显示revent = 1
    MDnsSdListener :: Monitor得到1
    MDnsSdListener :: Monitor轮询重新扫描-size = 15,live = 2
    用pollCount 3进行投票
    监视器民意测验得到的数据pollCount = 3,1
    找到监视器1。revents = 1-调用ProcessResults
    解决成功21找到实际设备名称._telnet._tcp.local。在real-device-name.local.:3603上带有txtLen 1
08-24 08:47:55.750 455-1483 /? D / MDnsDS:controlSocket显示revent = 0
    用pollCount 3进行投票
08-24 08:47:55.752 783-1663 /? E / NsdServiceInfo:解析txt记录(pos = 1)时:零大小的txt记录
08-24 08:47:55.753 455-1484 /? D / MDnsDS:使用参考0xb300c514停止解析
    freeServiceRef 21
    触发重新扫描
08-24 08:47:55.754 455-1483 /? D / MDnsDS:监控轮询获得的数据pollCount = 3,2
    找到监视器1。revents = 32-调用ProcessResults
08-24 08:47:55.754 455-1483 /? W // system / bin / netd:使用无效的DNSServiceRef调用dnssd_clientstub DNSServiceProcessResult 0xb3029070 FFFFFFFF DDDDDDDD
08-24 08:47:55.754 455-1483 /? D / MDnsDS:controlSocket显示revent = 1
    MDnsSdListener :: Monitor得到1
    MDnsSdListener :: Monitor轮询重新扫描-大小= 15,实时= 1
    用pollCount 2进行投票
08-24 08:47:55.756 455-1484 /? D / MDnsDS:getAddrInfo(22,(空)0,实际设备名称。本地。)
08-24 08:47:55.757 455-1484 /? D / MDnsDS:startMonitoring 22
08-24 08:47:55.758 455-1484 /? D / MDnsDS:触发重新扫描
    getAddrInfo成功
08-24 08:47:55.758 455-1483 /? D / MDnsDS:监控器轮询得到的数据pollCount = 2,1
    controlSocket显示revent = 1
    MDnsSdListener :: Monitor得到1
    MDnsSdListener :: Monitor轮询重新扫描-size = 15,live = 2
    用pollCount 3进行投票
    监视器民意测验得到的数据pollCount = 3,1
    找到监视器1。revents = 1-调用ProcessResults
    getAddrInfo成功获得22:22“ actual-device-name.local”。 120 192.168.8.243
    controlSocket显示revent = 0
    用pollCount 3进行投票
08-24 08:47:55.766 19492-19583 / com.tsi.fitpro D / ZeroConf:服务已解决。
08-24 08:47:55.766 455-1484 /? D / MDnsDS:使用参考0xb300c52c停止getaddrinfo
08-24 08:47:55.766 19492-19583 / com.tsi.fitpro D / ZeroConf:实际设备名称
08-24 08:47:55.766 455-1484 /? D / MDnsDS:freeServiceRef 22     触发重新扫描
08-24 08:47:55.766 19492-19583 / com.tsi.fitpro D / ZeroConf:3603
08-24 08:47:55.767 455-1483 /? D / MDnsDS:监控轮询获得的数据pollCount = 3,2
    找到监视器1。revents = 32-调用ProcessResults
08-24 08:47:55.767 455-1483 /? W // system / bin / netd:使用无效的DNSServiceRef调用dnssd_clientstub DNSServiceProcessResult 0xb3029070 FFFFFFFF DDDDDDDD
08-24 08:47:55.767 455-1483 /? D / MDnsDS:controlSocket显示revent = 1
08-24 08:47:55.768 455-1483 /? D / MDnsDS:MDnsSdListener :: Monitor得到1
    MDnsSdListener :: Monitor轮询重新扫描-大小= 15,实时= 1
    用pollCount 2进行投票
08-24 08:47:55.770 455-1482 /? D / EnterpriseController:netId为0
08-24 08:47:55.770 455-1482 /? D / DnsProxyListener:addr af 2的DNSDBG :: dns
08-24 08:47:55.779 455-1482 /? D / EnterpriseController:netId为0
08-24 08:47:55.779 455-1482 /? D / DnsProxyListener:DNSDBG :: dns addrinfo af 0
08-24 08:47:55.784 19492-19583 / com.tsi.fitpro D / ZeroConf:实际设备名称.lan
    准备将已解决的服务发送到Cordova。 08-24 08:47:55.785 19492-19583 / com.tsi.fitpro D / ZeroConf:已将已解决的服务发送到Cordova。

我真正看到的唯一区别是
finding emulator-name._telnet._tcp.local. at LaptopName.:3603
finding actual-device-name._telnet._tcp.local. at actual-device-name.local.:3603 LaptopName是域的一部分,像真实设备一样,结尾处没有.local。这会绊倒Android吗?

0 个答案:

没有答案