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

Отправка UDP-пакета в Kotlin

Отправка начинается с текста на английском и массива байтов. Конструктор DatagramPacket принимает данные, их длину, InetAddress хоста и номер порта. Хост 127.0.0.1 указывает на ту же машину, где запущена программа.

Метод send у DatagramSocket передаёт пакет в сеть. Порт назначения берут у сокета-приёмника после его запуска. Полный пример с потоком-слушателем выглядит так:

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) } }.start() ready.await() DatagramSocket().use { socket -> val data = "ping".toByteArray() val packet = DatagramPacket( data, data.size, InetAddress.getByName("127.0.0.1"), port, ) socket.send(packet) } }

Другой текст кладут в тот же каркас - меняют только строку перед toByteArray. Длина в пакете должна совпадать с размером массива:

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) } }.start() ready.await() DatagramSocket().use { socket -> val data = "order 42".toByteArray() val packet = DatagramPacket( data, data.size, InetAddress.getByName("127.0.0.1"), port, ) socket.send(packet) println(data.size) } }

Отправьте на localhost пакет с текстом "lab send". Приёмник пусть выведет полученную строку в консоль.

Отправьте два пакета подряд с текстами "first" и "second" на один порт. Приёмник напечатает обе строки по порядку.

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