我正在尝试在Android上充当广播或多播服务器,同时它充当热点。在广播出现一些初期问题(接收网络无法访问的错误)后,我发现这对Android来说是正常的,所以我选择通过Multicast实现它,因为我们认为这样做更好。当我这样做时,我收到以下错误:
W/System.err(13578): java.net.SocketException: No address associated with interface: [wlan0][21]
我理解这意味着什么,但是当我使用ADB Shell中的netcfg
命令激活热点时检查接口时,我看到以下内容:
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());
答案 0 :(得分:0)
事实证明这是由竞争条件引起的,这在我想到之后非常有意义。 Android需要一段时间才能更新sys/class/net
中的文件。我的解决方案是简单地轮询,直到它返回一个地址,然后继续。