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

Введение в UDP в Kotlin

Протокол UDP передает отдельные датаграммы - блоки байтов с адресом получателя. Соединение заранее не открывают: каждый пакет несет хост и порт назначения. На JVM для этого служат DatagramSocket и DatagramPacket из пакета java.net.

Приёмник слушает свободный порт: сокет создают с номером 0, система выдает значение через localPort. Отправитель шлёт текст на 127.0.0.1 и этот порт. Текст кладут в массив байтов через toByteArray, на приёме собирают строку из прочитанной длины. Оба конца удобно держать в одном main: приёмник в отдельном потоке, сокеты закрывают через use:

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 = "hello udp".toByteArray() val packet = DatagramPacket( data, data.size, InetAddress.getByName("127.0.0.1"), port, ) socket.send(packet) } }

В консоли приёмника появится строка hello udp. Такой одноразовый обмен показывает суть UDP: один пакет - один адрес, без рукопожатия как у TCP.

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