Java 来自Android的多播
我想在本地网络上使用Android上的多播(Android是服务器/发布服务器)。问题是,即使我使用了《Jeff Friesen-Learn Java for Android Development》一书中的确切示例代码,数据包也不会到达本地网络上的任何其他设备。我使用Wireshark进行故障排除,只有在远程捕获Android的流量时才能看到这些数据包。我使用了不同的端口、不同的多播地址(从231、232、239开始),尝试了DatagramSocket和MulticastSocket,手动设置了网络接口,使用了MulticastLock,增加了TTL,关闭了防火墙等等,但这些建议对我都不起作用 以下是我的示例代码:Java 来自Android的多播,java,android,sockets,kotlin,multicast,Java,Android,Sockets,Kotlin,Multicast,我想在本地网络上使用Android上的多播(Android是服务器/发布服务器)。问题是,即使我使用了《Jeff Friesen-Learn Java for Android Development》一书中的确切示例代码,数据包也不会到达本地网络上的任何其他设备。我使用Wireshark进行故障排除,只有在远程捕获Android的流量时才能看到这些数据包。我使用了不同的端口、不同的多播地址(从231、232、239开始),尝试了DatagramSocket和MulticastSocket,手动设
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清单权限(我添加了所有应该与多播相关的内容):
我在物理设备(小米Mi3,API 23)上测试代码,该设备与我的开发机器连接到同一个Wi-fi。我只能在同一台设备上接收数据包。我还尝试发送广播信息,广播工作正常
没有错误,没有警告。我错过什么了吗
谢谢你的帮助
<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"/>