1

将我的 android 设备设置为热点/接入点 (AP),如何使用 JmDNS(3.4.0) 查找连接到此 AP 的其他设备?

以正常方式创建 JmDNS 实例时,使用常规 AP 一切正常;

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 的服务?

4

3 回答 3

1

由于无法获取多播锁,因此无法在本地热点上使用多播。因此 JmDNS 将不起作用。

对于遇到此问题的其他人,查找我最终使用的连接设备的替代解决方案是基于解析 /proc/net/arp

于 2012-04-26T13:55:36.387 回答
1

在 Android 网络服务发现 (NSD) 的帮助下,这现在是可能的(从 API 16 开始)。
NSD 支持手机作为热点/AP 以及常规 AP 连接(即连接到路由器)。因此,您不再需要 JmDns 来实现您的目标。
请参阅:https ://developer.android.com/training/connect-devices-wireless/nsd

于 2019-02-05T13:40:06.577 回答
0

我认为这不能直接回答您的问题,但我发现除非我有活动的 wifi,否则 jmDNS 将无法工作。如果我的 wifi 关闭,我必须禁用发现功能。

于 2012-03-08T23:06:55.893 回答