Android UDP сервер не принимает сообщения
Никак не получается запустить UPD сервер. Порт открывается, никаких ошибок и исключений не выдает, но ничего не принимает. Вообще нужен бродкаст, но не работает никак. Ни адресно, ни широковещательно. Вводные такие: API: 29 Разрешения:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
Функция
private fun startServerSocket() {
Thread(Runnable {
var stringData: String? = null
val msg = ByteArray(1000)
var dp = DatagramPacket(msg, msg.size)
var ds: DatagramSocket? = null
try {
ds = DatagramSocket(9230)
//ds = DatagramSocket(9230, InetAddress.getByName("255.255.255.255"))
while (true) {
ds.receive(dp)
stringData = String(msg, 0, dp.length)
}
} catch (e: IOException) {
e.printStackTrace()
}
catch (e: java.lang.Exception) {
e.printStackTrace()
}
finally {
ds?.close()
}
}).start()
}
Ответы (1 шт):
https://docs.oracle.com/javase/7/docs/api/java/net/InetAddress.html
В описании метода сказано, что в том виде, в котором его используете вы, он доступен только на той машине, на которой выполняется данный код. Что логично, поскольку в этом случае не указан IP интерфейса, на котором следует слушать порт. Вы не сможете обратиться к нему извне. Для привязки к сетевому интерфейсу используйте:
ds = DatagramSocket(9230, InetAddress.getByAddress(byte[]{192, 168, 50, 100}))
где {192, 168, 50, 100} - IP-адрес одного (того, на который вы собираетесь принимать броадкасты) из сетевых интерфейсов вашего устройства.