📜  dart socket 监听新行 (1)

📅  最后修改于: 2023-12-03 14:40:36.670000             🧑  作者: Mango

Dart Socket 监听新行

在Dart中,网络编程是非常重要的。Socket是实现网络编程的一个重要的类。本文主要介绍在Dart中如何使用Socket监听新行。

监听新行

在Dart中使用Socket监听新行非常简单,我们只需要使用Socket的listen方法,并指定每行的分隔符。下面是这个方法的具体实现:

await socket.listen((event) {
    String received = String.fromCharCodes(event.data).trim();
    print('Received: $received');
}, onDone: () {
    socket.destroy();
}, onError: (error) {
    print('Error occurred: $error');
}, cancelOnError: true).asFuture();

这个方法的参数如下:

  • onData:每当新数据可读取时,就会调用该回调函数。在此回调函数中,可以对新读取到的数据进行处理。
  • onDone:当Socket连接被关闭时,就会调用该回调函数,该函数通常用于清理资源。
  • onError:当出现任意类型的错误时,就会调用该回调函数,通常用于记录错误的具体信息。
  • cancelOnError:指示当出现错误时是否自动取消监听新行。
分隔符

在监听新行时,我们需要指定行的分隔符。常见的分隔符包括\n\r、以及它们的组合\r\n。在Dart中,我们可以通过LineSplitter来实现分隔符的设置。下面是代码示例:

import 'dart:convert';
import 'dart:io';

void main() async {
    var server = await ServerSocket.bind('127.0.0.1', 8888);
    print('Listening on ${server.address}:${server.port}');

    await for (Socket socket in server) {
        print('Accepted connection from ${socket.remoteAddress}:${socket.remotePort}');
        socket.transform(utf8.decoder).transform(const LineSplitter()).listen((String line) {
            print('Received: $line');
            socket.writeln('Echo: $line');
        }, onDone: () {
            socket.destroy();
        }, onError: (error) {
            print('Error occurred: $error');
        }, cancelOnError: true);
    }
}

在这个例子中,我们创建了一个ServerSocket并在本地的8888端口上进行监听。对于每一个连接,我们都会在控制台输出连接的信息,并使用LineSplitter来实现分行读取。对于每一行,我们都会输出一条信息并回传相同的信息。

总结

本文主要介绍了在Dart中如何使用Socket监听新行的方法,并提供了代码示例。准确地监听新行对于进行网络编程非常重要。更多的关于Socket的信息,您可以在官方文档中获取到。