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

Обмен в одном запуске в Dart

Полный цикл в одном процессе: обработчик на listen ждет клиента, основной поток открывает Socket на loopback и номер из server.port. Сначала клиент пишет строку, затем читает ответ - порядок важен, иначе стороны ждут друг друга.

Ответ сервера попадает в консоль через print на клиенте после чтения строки из потока с LineSplitter:

import 'dart:io'; import 'dart:convert'; void main() async { var server = await ServerSocket.bind( InternetAddress.loopbackIPv4, 0, ); var port = server.port; server.listen((socket) async { var input = socket .transform(utf8.decoder) .transform(const LineSplitter()); await input.first; socket.writeln('status: done'); await socket.flush(); await socket.close(); }); var client = await Socket.connect( InternetAddress.loopbackIPv4, port, ); client.writeln('go'); await client.flush(); var reply = await client .transform(utf8.decoder) .transform(const LineSplitter()) .first; print(reply); await client.close(); await server.close(); }

Сервер может добавить к ответу прочитанный текст. Клиент печатает готовую строку целиком - так видно, что обмен завершился в рамках одного запуска:

import 'dart:io'; import 'dart:convert'; void main() async { var server = await ServerSocket.bind( InternetAddress.loopbackIPv4, 0, ); var port = server.port; server.listen((socket) async { var input = socket .transform(utf8.decoder) .transform(const LineSplitter()); var line = await input.first; socket.writeln('heard: $line'); await socket.flush(); await socket.close(); }); var client = await Socket.connect( InternetAddress.loopbackIPv4, port, ); client.writeln('wave'); await client.flush(); var text = await client .transform(utf8.decoder) .transform(const LineSplitter()) .first; print(text); await client.close(); await server.close(); }

Клиент отправляет "start" и печатает ответ "begin: start", который формирует сервер.

В консоли клиента после обмена должна быть строка "ok", если сервер получил "check".

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