【发布时间】:2021-11-17 22:56:48
【问题描述】:
我想从客户端应用发送和检索多个数据。
我试着这样做:
(服务器代码)
void start() async{
try{
_server = await ServerSocket.bind('127.0.0.1', 1234);
print('Waiting for connections');
_server.listen(_handleClient);
} catch(e) { await _server.close(); }
}
void _handleClient(Socket socket) async {
late String request, username, password;
socket.listen((data) => request = String.fromCharCodes(data));
socket.write(_publicKey);
socket.listen((data) => _clientPublicKey = _decrypt(String.fromCharCodes(data)));
socket.listen((data) => username = _decrypt(String.fromCharCodes(data)));
socket.listen((data) => password = _decrypt(String.fromCharCodes(data)));
var database = Database(username, password);
switch (request) {
case 'getItem':
getItem(socket, database);
break;
case 'addItem':
addItem(socket, database);
break;
[...]
}
}
但我有这个例外:
Waiting for connections
Unhandled exception:
Bad state: Stream has already been listened to.
#0 _StreamController._subscribe (dart:async/stream_controller.dart:635:7)
#1 _ControllerStream._createSubscription (dart:async/stream_controller.dart:786:19)
#2 _StreamImpl.listen (dart:async/stream_impl.dart:473:9)
#3 _Socket.listen (dart:io-patch/socket_patch.dart:2026:31)
#4 Server._handleClient (file:///D:/MyApps/Dart/my_netia_server/bin/Network/Server.dart:65:12)
#5 _RootZone.runUnaryGuarded (dart:async/zone.dart:1620:10)
#6 _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:341:11)
#7 _BufferingStreamSubscription._add (dart:async/stream_impl.dart:271:7)
[14 more...]
Process finished with exit code 255
担心的是每次接收到数据时都会调用listen中定义的函数。 我想要的是我的代码仅在必要时才需要数据。这将使我能够更简单地准确管理接收到的数据类型(例如:Object、String、int、...)
【问题讨论】:
标签: sockets dart networking stream