Dart:状态不佳:Stream 已被收听

时间:2021-04-08 15:39:49

标签: android flutter sockets dart tcp

我有非常简单的 TCP 客户端:

Socket socket = await Socket.connect(ipAddress, port);


socket.add(utf8.encode('Text 1'));
socket.listen((List<int> event) {
      var x = utf8.decode(event)
      //do something with this value...
});


socket.add(utf8.encode('Text 2'));
socket.listen((List<int> event) {
      var x = utf8.decode(event)
      //do something with this value...
});

.....
.....
.....

socket.close();

服务器等待来自客户端的新数据(“文本 1”,“文本 2”....),处理这些数据,然后返回答案。我怎样才能让飞镖听到所有这些答案?拳头监听()有效,但第二次抛出错误:未处理的异常:状态错误:流已被监听。

这里是完整的错误信息:

[ERROR:flutter/lib/ui/ui_dart_state.cc(186)] Unhandled Exception: Bad state: Stream has already been listened to.
E/flutter ( 5303): #0      _StreamController._subscribe (dart:async/stream_controller.dart:635:7)
E/flutter ( 5303): #1      _ControllerStream._createSubscription (dart:async/stream_controller.dart:786:19)
E/flutter ( 5303): #2      _StreamImpl.listen (dart:async/stream_impl.dart:473:9)
E/flutter ( 5303): #3      _Socket.listen (dart:io-patch/socket_patch.dart:2004:31)
E/flutter ( 5303): #4      serverRequest.<anonymous closure> (package:vivadispecing_sofer/scripts.dart:602:14)
E/flutter ( 5303): #5      _rootRunUnary (dart:async/zone.dart:1362:47)
E/flutter ( 5303): #6      _CustomZone.runUnary (dart:async/zone.dart:1265:19)
E/flutter ( 5303): #7      _CustomZone.runUnaryGuarded (dart:async/zone.dart:1170:7)
E/flutter ( 5303): #8      _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:341:11)
E/flutter ( 5303): #9      _BufferingStreamSubscription._add (dart:async/stream_impl.dart:271:7)
E/flutter ( 5303): #10     _SyncStreamControllerDispatch._sendData (dart:async/stream_controller.dart:733:19)
E/flutter ( 5303): #11     _StreamController._add (dart:async/stream_controller.dart:607:7)
E/flutter ( 5303): #12     _StreamController.add (dart:async/stream_controller.dart:554:5)
E/flutter ( 5303): #13     _Socket._onData (dart:io-patch/socket_patch.dart:2144:41)
E/flutter ( 5303): #14     _rootRunUnary (dart:async/zone.dart:1370:13)
E/flutter ( 5303): #15     _CustomZone.runUnary (dart:async/zone.dart:1265:19)
E/flutter ( 5303): #16     _CustomZone.runUnaryGuarded (dart:async/zone.dart:1170:7)
E/flutter ( 5303): #17     _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:341:11)
E/flutter ( 5303): #18     _BufferingStreamSubscription._add (dart:async/stream_impl.dart:271:7)
E/flutter ( 5303): #19     _SyncStreamControllerDispatch._sendData (dart:async/stream_controller.dart:733:19)
E/flutter ( 5303): #20     _StreamController._add (dart:async/stream_controller.dart:607:7)
E/flutter ( 5303): #21     _StreamController.add (dart:async/stream_controller.dart:554:5)
E/flutter ( 5303): #22     new _RawSocket.<anonymous closure> (dart:io-patch/socket_patch.dart:1680:33)
E/flutter ( 5303): #23     _NativeSocket.issueReadEvent.issue (dart:io-patch/socket_patch.dart:1192:14)
E/flutter ( 5303): #24     _microtaskLoop (dart:async/schedule_microtask.dart:40:21)
E/flutter ( 5303): #25     _startMicrotaskLoop (dart:async/schedule_microtask.dart:49:5)

1 个答案:

答案 0 :(得分:0)

您不止一次收听产生此错误的流。

Socket socket = await Socket.connect(ipAddress, port);


socket.add(utf8.encode('Text 1'));
socket.listen((List<int> event) {
      var x = utf8.decode(event)
      //do something with this value...
});

socket.add(utf8.encode('Text 2'));

.....
.....
.....

socket.close();

要多次收听流,您可以使用 socket.asBroadcastStream();