Я использую ktor для приложения kotlin / native.В настоящее время я тестирую вещи на стороне Android, и поэтому у меня есть код прямо в viewmodel.Приложению необходимо прослушивать входящие датаграммы udp, но оно, похоже, ничего не получает.Что я делаю неправильно в своей реализации?
Как я слушаю входящие данные во время тестирования:
viewModelScope.launch(Dispatchers.IO) {
aSocket(ActorSelectorManager(Dispatchers.IO)).udp()
.bind(InetSocketAddress("localhost", 40779))
.use { udpSocket ->
Log.d("hereUDP", udpSocket.localAddress.toString())
try {
while (!udpSocket.isClosed) {
val datagram = udpSocket.receive()
Log.d("hereUDP", "received")
val line = datagram.packet.readText()
Log.d("hereUDP", line)
if (line.toLowerCase() == "q")
udpSocket.close()
}
Log.d("hereUDP", "closed")
} catch (e:Throwable){
Log.d("hereUDP", "something went wrong", e)
udpSocket.close()
}
}
}
Код, который я действительно хотел получить:
coroutineScope {
launch(Dispatchers.IO + socket!!.socketContext) {
socket?.incoming
?.consumeEach {
val data = it.packet.readBytes()
val address = it.address as InetSocketAddress
listener?.onReceive(data, HostEndpoint(address.hostName))
}
}
}
Что я делал в своем терминале:
➜ platform-tools nc -u -c 192.168.1.130 40779
bla
bla
^C