Flutter连接本地.NET 4.8 WebSocket服务器报错:连接未升级为WebSocket
Flutter WebSocket连接失败:ws转为http并添加#号问题排查与解决
关键问题信息
- 客户端连接代码:
final channel = IOWebSocketChannel.connect(Uri.parse('ws://192.168.1.226:10600')); - 核心错误日志:
WebSocketException: Connection to 'http://192.168.1.226:10600#' was not upgraded to websocket
解决方案
1. 检查.NET 4.8服务器的WebSocket路由配置
.NET 4.8中WebSocket需要明确注册处理逻辑,避免根路径未处理WebSocket请求导致的重定向问题。推荐使用Owin中间件配置:
using Microsoft.Owin; using Owin; using System.Net.WebSockets; using System.Threading.Tasks; [assembly: OwinStartup(typeof(YourApp.Startup))] namespace YourApp { public class Startup { public void Configuration(IAppBuilder app) { // 映射专属WebSocket路由 app.Map("/ws", map => { map.UseWebSockets(); map.Run(async context => { if (context.WebSockets.IsWebSocketRequest) { WebSocket webSocket = await context.WebSockets.AcceptWebSocketAsync(); await HandleWebSocketConnection(webSocket); } else { context.Response.StatusCode = 400; } }); }); } private async Task HandleWebSocketConnection(WebSocket webSocket) { // 此处实现服务器与客户端的消息交互逻辑 } } }
2. 修正Flutter客户端连接地址
确保客户端地址与服务器WebSocket路由匹配,同时避免Uri.parse可能引发的解析异常:
// 直接使用字符串传入,确保地址指向服务器WebSocket路由 final channel = IOWebSocketChannel.connect('ws://192.168.1.226:10600/ws');
3. 验证服务器WebSocket可用性
用工具(如wscat)直接测试服务器连接,排除服务器端问题:
wscat -c ws://192.168.1.226:10600/ws
如果工具连接失败,优先检查服务器的端口开放、防火墙设置,以及WebSocket升级逻辑是否正确返回101 Switching Protocols响应。
4. 增强Flutter端异常调试
添加详细的异常捕获与日志输出,便于定位问题:
try { final channel = IOWebSocketChannel.connect('ws://192.168.1.226:10600/ws'); channel.stream.listen( (message) { // 展示服务器发送的消息 print('收到消息: $message'); }, onError: (error) => print('WebSocket错误: ${error.toString()}'), onDone: () => print('连接已关闭'), ); } catch (e) { print('连接失败: $e'); }
内容的提问来源于stack exchange,提问作者hasancaktar
相关产品推荐
相关产品推荐

