【问题标题】:Dart: Bad state: Stream has already been listened toDart:状态不佳:Stream 已被收听
【发布时间】:2021-07-04 12:35:53
【问题描述】:

我有非常简单的 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();

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

这是完整的错误信息:

[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)

【问题讨论】:

    标签: android flutter sockets dart tcp


    【解决方案1】:

    您不止一次收听流媒体,这会产生此错误。

    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();

    【讨论】:

    • 如何申请 asBroadcastStream()?我刚刚尝试了 socket.asBroadcastStream() 和 socket = socket.asBroadcastStream() 但它们都不起作用。还是同样的错误。 (我将它们插入到 Socket.connect 下)
    • 试试socket.asBroadcastStream(onListen: (subscription) { subscription.onData((data) { var x = utf8.decode(data); //todo something }); },onCancel: (subscription) { },);
    • 现在可以了,谢谢。但是有什么办法让它等待服务器的回答吗?它不在乎它是否听过某些东西。
    猜你喜欢
    • 1970-01-01
    • 2021-03-06
    • 1970-01-01
    • 1970-01-01
    • 2021-02-26
    • 2018-09-01
    • 2021-12-26
    • 2018-12-26
    • 2020-05-22
    相关资源
    最近更新 更多