You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 00:10:36