Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗ktSpUdRcv 286 of 299 menu
◀ ▶

Приём UDP-пакета в Kotlin

Приёмник создаёт буфер фиксированного размера и оборачивает его в DatagramPacket. Вызов receive ждёт первый пакет и заполняет буфер. Реальная длина лежит в поле length - по ней строят строку из data, а не по всему массиву.

Строку получают через String с началом 0 и длиной пакета. После приёма текст можно напечатать или обработать дальше:

import java.net.DatagramPacket import java.net.DatagramSocket import java.net.InetAddress import java.util.concurrent.CountDownLatch fun main() { val ready = CountDownLatch(1) var port = 0 Thread { DatagramSocket(0).use { socket -> port = socket.localPort ready.countDown() val buf = ByteArray(256) val packet = DatagramPacket(buf, buf.size) socket.receive(packet) val text = String( packet.data, 0, packet.length, ) println(text) } }.start() ready.await() DatagramSocket().use { socket -> val data = "note".toByteArray() val packet = DatagramPacket( data, data.size, InetAddress.getByName("127.0.0.1"), port, ) socket.send(packet) } }

Размер буфера задают с запасом: лишние байты в строку не попадут, если указать length. Тот же приёмник подходит для более длинного текста, когда он помещается в буфер:

import java.net.DatagramPacket import java.net.DatagramSocket import java.net.InetAddress import java.util.concurrent.CountDownLatch fun main() { val ready = CountDownLatch(1) var port = 0 Thread { DatagramSocket(0).use { socket -> port = socket.localPort ready.countDown() val buf = ByteArray(512) val packet = DatagramPacket(buf, buf.size) socket.receive(packet) val text = String( packet.data, 0, packet.length, ) println(text.length) } }.start() ready.await() DatagramSocket().use { socket -> val data = "status ok".toByteArray() val packet = DatagramPacket( data, data.size, InetAddress.getByName("127.0.0.1"), port, ) socket.send(packet) } }

Примите один пакет с текстом "ready" и выведите его в консоль одной строкой.

После приёма текста "metric" выведите число символов в полученной строке.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить