Я хочу использовать многоадресную рассылку на Android в локальной сети (Android - это сервер / издатель ). Проблема в том, что даже если я использую точный пример кода из baeldung или из книги: Джефф Фризен - Изучите Java для Android Разработка , пакеты НЕ добраться до любого другого устройства в локальной сети. Я использую Wireshark для устранения неполадок и вижу эти пакеты, только если удаленно перехватываю трафик Android c. Я использовал разные порты, разные адреса многоадресной рассылки (начиная с 231, 232, 239, ...), пробовал оба DatagramSocket и MulticastSocket, вручную устанавливал сетевой интерфейс, использовал MulticastLock, увеличивал TTL, выключал брандмауэр и т. Д. c. , но ни одна из этих рекомендаций не сработала для меня.
Вот мой пример кода:
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"/>
Я тестирую код на физическом устройстве (Xiaomi Mi3, API 23), подключенный к тому же Wi-Fi, что и моя развивающаяся машина. Я могу получать пакеты только на одном устройстве. Я также пытался отправлять широковещательные сообщения, и трансляция работает нормально.
Нет ошибок, нет предупреждений. Я что-то упустил?
Спасибо за помощь.