У меня есть приложение для Android, которое создает MulticastSocket, присоединяется к группе MC и получает сообщения с другого компьютера в локальной сети Wi-Fi.
MulticastSocket socket = new MulticastSocket(null); // Create an unbound socket.
socket.setSoTimeout(LISTEN_TIMEOUT_MILLIS);
socket.setReuseAddress(true);
socket.bind(new InetSocketAddress(listenPort)); // Bind to the configured multicast port
final WifiManager.MulticastLock lock = wifiManager.createMulticastLock("my_lock");
lock.acquire();
socket.setNetworkInterface(networkInterface);
socket.joinGroup(multicastGroup);
while (true) {
socket.receive(packet);
// Do something with the packet
// Handle timeout etc.
// Handle change of network interface by leaving group, setting netIntf and joining group again.
}
socket.leaveGroup(multicastGroup);
socket.close();
lock.release();
Хорошо работает на большинстве устройств Android (Huawei, Samsung),но в некоторых (Pixel3), если WiFi на устройстве выключен, а затем снова включен, когда приложение видит, что соединение Wi-Fi активируется, может пройти до 14 минут (это очень изменчиво), прежде чем начнутся сообщения MC.получение снова.
Даже выбрасывание Socket и создание нового MCSocket не уменьшает задержку.
Но это должно быть какое-то состояние, которое удерживается внутри JVM, потому что перезапускприложения вызывает его немедленное подключение.
Такое ощущение, что для подключения MC удерживается некоторая аренда, которая обновляется только в тактовом цикле.
Так что мои вопросы:
- Что приводит к тому, что сообщения MC не передаются сразу после восстановления соединения WiFi и создания нового MCSocketхотел послушать это.
- Что я могу сделать, чтобы обеспечить своевременное возобновление потока сообщений?