Asp.net core 颤振websocket连接问题
我正在尝试开发一个颤振应用程序,它连接到服务器并使用websocket交换数据。服务器位于.Net Core中,并使用Asp.Net Core WebSocket实现此功能 我面临的问题是,我的颤振应用程序无法连接到服务器,并抛出以下错误Asp.net core 颤振websocket连接问题,asp.net-core,websocket,dart,flutter,Asp.net Core,Websocket,Dart,Flutter,我正在尝试开发一个颤振应用程序,它连接到服务器并使用websocket交换数据。服务器位于.Net Core中,并使用Asp.Net Core WebSocket实现此功能 我面临的问题是,我的颤振应用程序无法连接到服务器,并抛出以下错误 E/flutter (31498): [ERROR:topaz/lib/tonic/logging/dart_error.cc(16)] Unhandled exception: E/flutter (31498): WebSocketChannelExcep
E/flutter (31498): [ERROR:topaz/lib/tonic/logging/dart_error.cc(16)] Unhandled exception:
E/flutter (31498): WebSocketChannelException: WebSocketChannelException: WebSocketException: Connection to 'http://127.0.0.1/client#' was not upgraded to websocket
E/flutter (31498): #0 new IOWebSocketChannel._withoutSocket.<anonymous closure> (package:web_socket_channel/io.dart:83:24)
E/flutter (31498): #1 _invokeErrorHandler (dart:async/async_error.dart:13:29)
E/flutter (31498): #2 _HandleErrorStream._handleError (dart:async/stream_pipe.dart:286:9)
E/flutter (31498): #3 _ForwardingStreamSubscription._handleError (dart:async/stream_pipe.dart:168:13)
E/flutter (31498): #4 _RootZone.runBinaryGuarded (dart:async/zone.dart:1328:10)
E/flutter (31498): #5 _BufferingStreamSubscription._sendError.sendError (dart:async/stream_impl.dart:350:15)
E/flutter (31498): #6 _BufferingStreamSubscription._sendError (dart:async/stream_impl.dart:367:16)
E/flutter (31498): #7 _BufferingStreamSubscription._addError (dart:async/stream_impl.dart:266:7)
E/flutter (31498): #8 _SyncStreamController._sendError (dart:async/stream_controller.dart:767:19)
E/flutter (31498): #9 _StreamController._addError (dart:async/stream_controller.dart:647:7)
E/flutter (31498): #10 _RootZone.runBinaryGuarded (dart:async/zone.dart:1328:10)
E/flutter (31498): #11 _BufferingStreamSubscription._sendError.sendError (dart:async/stream_impl.dart:350:15)
E/flutter (31498): #12 _BufferingStreamSubscription._sendError (dart:async/stream_impl.dart:367:16)
E/flutter (31498): #13 _BufferingStreamSubscription._addError (dart:async/stream_impl.dart:266:7)
E/flutter (31498): #14 _SyncStreamController._sendError (dart:async/stream_controller.dart:767:19)
E/flutter (31498): #15 _StreamController._addError (dart:async/stream_controller.dart:647:7)
E/flutter (31498): #16 new Stream.fromFuture.<anonymous closure> (dart:async/stream.dart:110:18)
E/flutter (31498): #17 _RootZone.runBinary (dart:async/zone.dart:1386:54)
E/flutter (31498): #18 _FutureListener.handleError (dart:async/future_impl.dart:141:20)
E/flutter (31498): #19 Future._propagateToListeners.handleError (dart:async/future_impl.dart:649:47)
E/flutter (31498): #20 Future._propagateToListeners (dart:async/future_impl.dart:670:24)
E/flutter (31498): #21 Future._completeError (dart:async/future_impl.dart:489:5)
E/flutter (31498): #22 Future._asyncCompleteError.<anonymous closure> (dart:async/future_impl.dart:537:7)
E/flutter (31498): #23 _microtaskLoop (dart:async/schedule_microtask.dart:41:21)
E/flutter (31498): #24 _startMicrotaskLoop (dart:async/schedule_microtask.dart:50:5)
下面是"我的主页状态"实现
class _MyHomePageState extends State<MyHomePage> {
int _counter = 0;
initState() {
super.initState();
widget.channel.stream.listen(this.onData, onError: onError, onDone: onDone);
(() async {
setState(() {
});
});
}
onDone(){
debugPrint("Socket is closed");
}
onError(err){
debugPrint(err.runtimeType.toString());
WebSocketChannelException ex = err;
debugPrint(ex.message);
}
onData(event){
debugPrint(event);
}
我理解这与dart websocket包如何执行与服务器的握手有关,但无法指出问题所在
有人能找出这里到底出了什么问题吗?我希望这会对很多人有所帮助,尽管这个问题不再相关。问题在于.Net核心websocket实现 通过一些研究和分析Wireshark日志,我可以意识到.Net core以某种方式希望websocket协议更新头采用特定的格式(即实现区分大小写),这对于.Net core framework 2.1是正确的。但是,该问题在下一版本中立即得到修复。我切换到测试版,问题得到了解决。关于这一点,我咨询了Flatter开发人员和.Net核心团队,他们也证实了这一点
.Net核心的当前版本(在回答时,这是3.0版,没有这样的问题。如何连接到服务器?请添加相关代码。可能是我已经更新了代码并添加了缺失的部分。除了创建频道并开始收听外,没有其他内容。除此之外,所有其他内容都是模板代码自动生成b颤振。
class _MyHomePageState extends State<MyHomePage> {
int _counter = 0;
initState() {
super.initState();
widget.channel.stream.listen(this.onData, onError: onError, onDone: onDone);
(() async {
setState(() {
});
});
}
onDone(){
debugPrint("Socket is closed");
}
onError(err){
debugPrint(err.runtimeType.toString());
WebSocketChannelException ex = err;
debugPrint(ex.message);
}
onData(event){
debugPrint(event);
}
I/flutter ( 4608): WebSocketChannelException
I/flutter ( 4608): WebSocketChannelException: WebSocketException: Connection to 'http://18.217.117.92/client#' was not upgraded to websocket
I/flutter ( 4608): Socket is closed