首页 > 解决方案 > 来自 Android 的多播

问题描述

我想在本地网络上的 Android 上使用多播(Android 是server/publisher)。问题是,即使我使用来自 baeldung的确切示例代码或书中的示例代码:Jeff Friesen - Learn Java for Android Development,数据包也不会到达本地网络上的任何其他设备。我使用 Wireshark 进行故障排除,只有在远程捕获 Android 的流量时才能看到这些数据包。我使用了不同的端口,不同的多播地址(以231、232、239,...开头),同时尝试了DatagramSocket和MulticastSocket,手动设置了网络接口,使用了MulticastLock,增加了TTL,关闭了防火墙等,但没有这些建议中的一些对我有用。

这是我的示例代码:

    doAsync {
        val group = InetAddress.getByName("224.0.0.114")
        val socket = DatagramSocket()

        while (true) {
            val msg = "hello world".toByteArray()
            val packet = DatagramPacket(msg, msg.size, group, 4239)
            socket.send(packet)
            Thread.sleep(1000)
        }
    }

和 Android 清单权限(我添加了应该与多播相关的所有内容):

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

我在物理设备(小米 Mi3,API 23)上测试代码,连接到与我的开发机器相同的 Wi-fi。我只能在同一设备上接收数据包。我还尝试发送广播消息并且广播工作正常。

没有错误,没有警告。我错过了什么吗?

感谢您的帮助。

标签: javaandroidsocketskotlinmulticast

解决方案


推荐阅读