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

Клиент сокета в Dart

Клиентская сторона открывает соединение через Socket.connect: первый аргумент - адрес, второй - номер порта, на котором уже слушает сервер. Объект Socket закрывают через close после обмена.

Текст на сервер передают в сокет. Метод 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()); await input.first; await socket.close(); }); var client = await Socket.connect( InternetAddress.loopbackIPv4, port, ); client.writeln('client line'); await client.flush(); await client.close(); await server.close(); }

Сервер в фоне лишь принимает соединение и читает строку - это заготовка для проверки клиента. Адрес InternetAddress.loopbackIPv4 и порт из server.port совпадают с теми, что выбрал ServerSocket в том же запуске:

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 text = await input.first; print('server got: $text'); await socket.close(); }); var client = await Socket.connect( InternetAddress.loopbackIPv4, port, ); client.writeln('note from client'); await client.flush(); await client.close(); await server.close(); }

В одном запуске клиент отправляет строку "ping", сервер печатает ее с префиксом "got: " в консоли.

Строка "alpha" уходит с клиента на loopback; на стороне сервера в консоли должно появиться "alpha" без изменений.

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