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

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

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

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

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); } catch (Exception ex) { throw new RuntimeException(ex); } }); receiver.start(); ready.await(); try (DatagramSocket socket = new DatagramSocket()) { byte[] data = "ping".getBytes( StandardCharsets.UTF_8, ); DatagramPacket packet = new DatagramPacket( data, data.length, InetAddress.getByName("127.0.0.1"), port[0], ); socket.send(packet); } } }

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

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); } catch (Exception ex) { throw new RuntimeException(ex); } }); receiver.start(); ready.await(); try (DatagramSocket socket = new DatagramSocket()) { byte[] data = "order 42".getBytes( StandardCharsets.UTF_8, ); DatagramPacket packet = new DatagramPacket( data, data.length, InetAddress.getByName("127.0.0.1"), port[0], ); socket.send(packet); System.out.println(data.length); } } }

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

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

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