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

Несколько сообщений в Dart

Одно TCP-соединение может передать несколько строк подряд: каждая заканчивается переводом строки, как при одиночной отправке. Сервер читает в цикле с ограничением по числу строк или пока клиент не закроет сокет.

Две строки отправляют подряд через writeln, затем сбрасывают буфер и читают столько же ответов из потока ввода клиента:

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 count = 0; await for (var line in input) { socket.writeln('ack: $line'); await socket.flush(); count++; if (count >= 2) { break; } } await socket.close(); }); var client = await Socket.connect( InternetAddress.loopbackIPv4, port, ); client.writeln('one'); client.writeln('two'); await client.flush(); var replies = client .transform(utf8.decoder) .transform(const LineSplitter()) .take(2); await for (var reply in replies) { 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 count = 0; await for (var line in input) { count++; print('line $count: $line'); if (count >= 2) { break; } } await socket.close(); }); var client = await Socket.connect( InternetAddress.loopbackIPv4, port, ); client.writeln('part-0'); client.writeln('part-1'); await client.flush(); await client.close(); await server.close(); }

Три строки "a", "b", "c" уходят с клиента; сервер печатает каждую с префиксом "item: ", затем клиент закрывает сокет.

Клиент после трех строк "n1", "n2", "n3" читает три ответа "got n1", "got n2", "got n3" и выводит их в консоль.

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