Dart Socket: прослушивание новых строк с примерами

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

  1. Использование библиотеки dart:io:

    import 'dart:io';
    void main() async {
    ServerSocket server = await ServerSocket.bind('127.0.0.1', 1234);
    print('Socket listening on ${server.address}:${server.port}');
    
    await for (Socket socket in server) {
    print('Client connected: ${socket.remoteAddress}:${socket.remotePort}');
    
    socket.transform(utf8.decoder).listen((String data) {
      print('Received data: $data');
      // Process the received data
    });
    }
    }
  2. Использование библиотеки dart:ioс необработанными сокетами:

    import 'dart:io';
    void main() async {
    RawServerSocket server = await RawServerSocket.bind('127.0.0.1', 1234);
    print('Socket listening on ${server.address}:${server.port}');
    
    await for (RawSocket socket in server) {
    print('Client connected: ${socket.remoteAddress}:${socket.remotePort}');
    
    socket.listen((RawSocketEvent event) {
      if (event == RawSocketEvent.read) {
        String data = String.fromCharCodes(socket.read());
        print('Received data: $data');
        // Process the received data
      }
    });
    }
    }
  3. Использование библиотеки dart:ioи StreamTransformer:

    import 'dart:io';
    import 'dart:convert';
    void main() async {
    ServerSocket server = await ServerSocket.bind('127.0.0.1', 1234);
    print('Socket listening on ${server.address}:${server.port}');
    
    await for (Socket socket in server) {
    print('Client connected: ${socket.remoteAddress}:${socket.remotePort}');
    
    StreamTransformer<List<int>, String> transformer =
        StreamTransformer.fromHandlers(
            handleData: (List<int> data, EventSink<String> sink) {
      String message = utf8.decode(data);
      sink.add(message);
    });
    
    socket.transform(transformer).listen((String data) {
      print('Received data: $data');
      // Process the received data
    });
    }
    }

с соответствующим IP-адресом, если вы хотите прослушивать другой сетевой интерфейс.