将我的Android设备设置为热点/接入点(AP), 如何使用JmDNS(3.4.0)查找连接到该AP的其他设备?
使用常规AP在正常方式创建JmDNS实例时一切正常;
jmdns = JmDNS.create();
但是使用我的设备作为AP会抛出异常。
java.net.SocketException: No such device
at org.apache.harmony.luni.platform.OSNetworkSystem.setSocketOption(Native Method)
at dalvik.system.BlockGuard$WrappedNetworkSystem.setSocketOption(BlockGuard.java:382)
at org.apache.harmony.luni.net.PlainDatagramSocketImpl.setOption(PlainDatagramSocketImpl.java:198)
at org.apache.harmony.luni.net.PlainDatagramSocketImpl.join(PlainDatagramSocketImpl.java:137)
at java.net.MulticastSocket.joinGroup(MulticastSocket.java:190)
at javax.jmdns.impl.JmDNSImpl.openMulticastSocket(JmDNSImpl.java:459)
at javax.jmdns.impl.JmDNSImpl.<init>(JmDNSImpl.java:420)
at javax.jmdns.JmDNS.create(JmDNS.java:60)
我也尝试使用本地IP
创建JmDNS实例jmdns = JmDNS.create( InetAddress.getByName("192.168.1.1") );
只会抛出相同的异常。
如何让JmDNS查找连接到本地AP的服务?
答案 0 :(得分:1)
无法在本地热点上使用多播,因为无法获取多播锁。因此JmDNS将无效。
对于遇到此问题的其他人来说,找到我最终使用的连接设备的替代解决方案是基于解析/ proc / net / arp
答案 1 :(得分:0)
我不认为这直接回答了你的问题,但我发现除非我有主动wifi,否则jmDNS将无效。如果我的wifi关闭,我不得不禁用发现。
答案 2 :(得分:0)
借助Android网络服务发现(NSD),现在可以实现此功能(自API 16开始)。
NSD支持电话作为热点/ AP以及常规的AP连接(即与路由器的连接)。因此,您不再需要JmDns来实现您的目标。
参见:https://developer.android.com/training/connect-devices-wirelessly/nsd