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

Введение в UDP в Java

Сервис опроса датчиков может слать короткие отчёты раз в секунду, не держа постоянный канал как при TCP. Протокол UDP передаёт отдельные датаграммы: блок байтов с адресом получателя. Соединение заранее не открывают, каждый пакет несёт хост и порт назначения.

В Java 27 для этого служат DatagramSocket и DatagramPacket из пакета java.net. Приёмник слушает свободный порт: сокет создают с номером 0, система выдаёт значение через getLocalPort. Отправитель шлёт текст на 127.0.0.1 и этот порт. Текст кладут в массив байтов через getBytes, на приёме собирают строку из прочитанной длины.

Оба конца удобно держать в одном main: приёмник в отдельном потоке, сокеты закрывают через try-with-resources. Полный одноразовый обмен на localhost выглядит так:

import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.nio.charset.StandardCharsets; import java.util.concurrent.CountDownLatch; public class Main { public static void main(String[] args) throws Exception { CountDownLatch ready = new CountDownLatch(1); int[] port = new int[1]; Thread receiver = new Thread(() -> { try (DatagramSocket socket = new DatagramSocket(0)) { port[0] = socket.getLocalPort(); ready.countDown(); byte[] buf = new byte[256]; DatagramPacket packet = new DatagramPacket( buf, buf.length, ); socket.receive(packet); String text = new String( packet.getData(), 0, packet.getLength(), StandardCharsets.UTF_8, ); System.out.println(text); } catch (Exception ex) { throw new RuntimeException(ex); } }); receiver.start(); ready.await(); try (DatagramSocket socket = new DatagramSocket()) { byte[] data = "hello udp".getBytes( StandardCharsets.UTF_8, ); DatagramPacket packet = new DatagramPacket( data, data.length, InetAddress.getByName("127.0.0.1"), port[0], ); socket.send(packet); } } }

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

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