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

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

Приемник подписывается на сокет через listen. При событии RawSocketEvent.read вызывают receive и получают объект датаграммы. Текст берут из data через utf8.decode - отдельно указывать длину не нужно, если пакет целиком в памяти.

После приема текст можно напечатать или обработать дальше:

import 'dart:async'; import 'dart:convert'; import 'dart:io'; void main() async { var receiver = await RawDatagramSocket.bind( InternetAddress.loopbackIPv4, 0, ); var listenPort = receiver.port; var done = Completer<void>(); receiver.listen((event) { if (event == RawSocketEvent.read) { var datagram = receiver.receive(); if (datagram != null) { print(utf8.decode(datagram.data)); done.complete(); } } }); var sender = await RawDatagramSocket.bind( InternetAddress.loopbackIPv4, 0, ); sender.send( utf8.encode('note'), InternetAddress.loopbackIPv4, listenPort, ); await done.future; receiver.close(); sender.close(); }

Сокет принимает пакет, пока его размер укладывается в ограничения UDP. Тот же приемник подходит для более длинного текста на localhost:

import 'dart:async'; import 'dart:convert'; import 'dart:io'; void main() async { var receiver = await RawDatagramSocket.bind( InternetAddress.loopbackIPv4, 0, ); var listenPort = receiver.port; var done = Completer<void>(); receiver.listen((event) { if (event == RawSocketEvent.read) { var datagram = receiver.receive(); if (datagram != null) { var text = utf8.decode(datagram.data); print(text.length); done.complete(); } } }); var sender = await RawDatagramSocket.bind( InternetAddress.loopbackIPv4, 0, ); sender.send( utf8.encode('status ok'), InternetAddress.loopbackIPv4, listenPort, ); await done.future; receiver.close(); sender.close(); }

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

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

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