0

我正在尝试在 Android 上设置广播或多播服务器,同时它充当热点。在广播的一些初始问题(接收网络无法访问的错误)之后,我发现这对于 Android 来说是正常的,所以我选择通过多播来实现它,因为我们认为无论如何这是更可取的。当我这样做时,我收到以下错误:

W/System.err(13578): java.net.SocketException: No address associated with interface: [wlan0][21]

我理解这意味着什么,但是当我在热点处于活动状态时使用netcfgADB Shell 中的命令检查接口时,我看到以下内容:

wlan0  UP  192.168.43.1/24  0x00001043 02:1a:11:f0:3d:80

所以我不明白为什么在运行时我得到一个没有地址相关的异常,但 shell 命令显示一个,除非是因为 Android 试图以某种方式阻止我。任何帮助了解正在发生的事情以及我如何在此界面上成功打开多播套接字都会很棒。我尝试如下打开它:

// Create the multicast socket
final MulticastSocket socket = new MulticastSocket(0);
Log.d(TAG, "Joining multicast group: 224.0.0.30");
final SocketAddress address = new InetSocketAddress(InetAddress.getByName("224.0.0.30"), socket.getLocalPort());
socket.joinGroup(address, NetworkInterface.getByName("wlan0"));
Log.d(TAG, "Multicast socket using interface: " + socket.getNetworkInterface());
4

1 回答 1

0

事实证明这是由竞争条件引起的,经过我的思考,这是完全有道理的。Android 需要一些时间才能更新sys/class/net. 我的解决方案是简单地反复轮询,直到它返回一个地址,然后继续。

于 2014-12-05T02:06:36.747 回答