Отправка UDP-пакета в Dart
Отправка начинается с текста на английском и списка
байтов через utf8.encode. Метод send
у RawDatagramSocket принимает данные,
InternetAddress хоста и номер порта.
Адрес InternetAddress.loopbackIPv4 указывает
на ту же машину, где запущена программа.
Порт назначения берут у сокета-приемника после его запуска. Полный пример с подпиской на прием выглядит так:
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) {
receiver.receive();
done.complete();
}
});
var sender = await RawDatagramSocket.bind(
InternetAddress.loopbackIPv4,
0,
);
sender.send(
utf8.encode('ping'),
InternetAddress.loopbackIPv4,
listenPort,
);
await done.future;
receiver.close();
sender.close();
}
Другой текст кладут в тот же каркас - меняют только
строку перед utf8.encode. Размер списка
можно вывести для проверки:
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) {
receiver.receive();
done.complete();
}
});
var sender = await RawDatagramSocket.bind(
InternetAddress.loopbackIPv4,
0,
);
var data = utf8.encode('order 42');
sender.send(
data,
InternetAddress.loopbackIPv4,
listenPort,
);
print(data.length);
await done.future;
receiver.close();
sender.close();
}
Отправьте на localhost пакет с текстом
"lab send". Выведите полученную
строку в консоли приемника.
Отправьте два пакета подряд с текстами
"first" и "second" на один
порт. Приемник напечатает обе строки по порядку.