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

Сервер сокета в Dart

Сервер создают через ServerSocket.bind с номером порта. Обработчик на listen получает отдельный Socket для обмена с клиентом, как только тот подключится. Его тоже закрывают через close.

Входящую строку читают из потока с LineSplitter. Ответ записывают через writeln и сразу сбрасывают буфер flush:

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('echo: $line'); await socket.flush(); await socket.close(); }); var client = await Socket.connect( InternetAddress.loopbackIPv4, port, ); client.writeln('probe'); await client.flush(); var reply = await client .transform(utf8.decoder) .transform(const LineSplitter()) .first; print(reply); await client.close(); await server.close(); }

Прослушивание порта вешают до вызова Socket.connect, чтобы в main осталось место для клиента. Схема та же: порт 0, затем чтение одной строки и ответ:

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('ok: $line'); await socket.flush(); await socket.close(); }); var client = await Socket.connect( InternetAddress.loopbackIPv4, port, ); client.writeln('ready'); await client.flush(); var text = await client .transform(utf8.decoder) .transform(const LineSplitter()) .first; print(text); await client.close(); await server.close(); }

После строки "ask" от клиента сервер отвечает "answer: ask"; клиент выводит эту строку в консоль.

Сервер возвращает клиенту текст "pong", если получил "ping"; в консоли клиента должно быть "pong".

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