Попробуйте catch, не могу уловить ошибку ENETUNREACH внутри вспомогательного класса сокетаAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Попробуйте catch, не могу уловить ошибку ENETUNREACH внутри вспомогательного класса сокета

Сообщение Anonymous »


Я тестировал свое приложение, что произойдет, если я отключу Интернет на устройстве, и оно вышло из строя. Я уже заранее добавил кучу ловушек в код «init» помощника сокета, и они, похоже, не срабатывают. Вот как выглядит мой код:

fun start() { GlobalScope.launch(Dispatchers.IO) { пытаться { BasicSocket = DatagramSocket(UDP_SERVER_PORT) val udpPayload = "некоторая строковая полезная нагрузка" BasicSendToUDP(udpPayload, getBroadcastAddr()) в то время как (истина) { базовыйReceiveFromUDP() } } catch (e: SocketException) { Log.e(TAG, «Ошибка сокета:», e) } catch (e: SecurityException) { Log.e(TAG, «Ошибка секунды:», e) } catch (e: IOException) { Log.e(TAG, «Ошибка ввода-вывода:», e) } catch (e: Exception) { Log.e(TAG, «Ошибка:», e) } } } Этот метод start() вызывается в верхней части onCreate моего MainActivity.

Я уже пробовал другой подход, который выглядит следующим образом:

val t = Тема { пытаться { BasicSocket = DatagramSocket(UDP_SERVER_PORT) val udpPayload = "некоторая строковая полезная нагрузка" BasicSendToUDP(udpPayload, getBroadcastAddr()) в то время как (истина) { базовыйReceiveFromUDP() } } catch (e: Exception) { Log.e(TAG, «Ошибка:», e) } } т.старт() Но я все равно получаю ту же ошибку:

java.io.IOException: ошибка отправки: ENETUNREACH (сеть недостижимо) в libcore.io.IoBridge.maybeThrowAfterSendto (IoBridge.java:721) в libcore.io.IoBridge.sendto(IoBridge.java:688) в java.net.PlainDatagramSocketImpl.send(PlainDatagramSocketImpl.java:126) в java.net.DatagramSocket.send(DatagramSocket.java:723) в com.bsu.atlantis.utils.helpers.SocketHelper.basicSendToUDP$lambda$3(SocketHelper.kt:74)

basicSendToUDP() выглядит следующим образом:

fun BasicSendToUDP(payload: String, iAddr: InetAddress) { Нить { вал sendPacket = ДатаграммПакет( полезная нагрузка.toByteArray(), полезная нагрузка.длина, iАддр, UDP_SERVER_PORT ) BasicSocket.send(sendPacket) }.начинать() } Весь опубликованный мной код отлично работает, когда я включаю Wi-Fi на своем устройстве
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Android»