首页 > 解决方案 > 在 Flutter 中使用 listen() 从 TCP Socket 获取数据

问题描述

我需要一种从我制作但不使用 Socket 方法的 TCP Java 服务器检索数据(在 Flutter 应用程序内)的方法socket.listen()。我想要这样的东西socket.read()可能会返回,Future<Uint8List>所以我可以等待。这样的事情存在吗?

标签: socketsflutterdarttcpasync-await

解决方案


即使存在这样的方法(顺便说一句,RawSocket具有这样的功能,但它是非阻塞的,并且只会返回可用的内容 - 可能为零字节),您仍然会遇到一些问题。

未来将以任意数量的字节完成,这可能不是整个消息,因此您必须保存这些字节并等待更多。

可能更重要的是,您将如何使用这种方法?也许像这样?

Future<Uint8List> readBytes() async {
  return await _socket.read(); // NB no such method really exists
}

但是你如何使用它呢?

readBytes().then((bytes) {
  // process the bytes
});

但是,这并不简单

socket.listen((bytes) {
  // process the bytes
});

也许您可以解释您不喜欢什么listen或为什么不能使用它。请记住,您可能在 Java 中使用的阻塞读取通常在后台线程上完成,而在 Dart 中则没有。


推荐阅读