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

Flutter(Dart)连接Flask(Python)WebSocket时出现请求版本错误

解决Flutter与Flask-Socket WebSocket连接报错问题

问题根源

你在Flutter端使用wss://(加密WebSocket协议)连接未配置SSL证书的Flask服务器,服务器无法解析加密请求,因此抛出Bad request version错误。Flask-Sock默认运行在普通HTTP环境下,原生不支持WSS协议,必须手动配置SSL才能启用加密连接。

修复方案

1. 快速修复:改用普通WebSocket协议

直接将Flutter端的连接协议从wss://改为ws://,适配Flask默认的HTTP环境:

final channel = WebSocketChannel.connect(
  Uri.parse('ws://10.0.2.2:5000/echo'),
);

2. 确保Flask服务器可被模拟器访问

启动Flask时,绑定到允许外部访问的网络接口,确保安卓模拟器能通过10.0.2.2映射到本地服务器:

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000, debug=True)
  • 0.0.0.0让服务器监听所有网络接口,支持模拟器的映射访问
  • 调试模式不影响WebSocket功能,生产环境建议关闭

3. (生产环境可选)配置WSS加密连接

如果业务需要加密通信,需为Flask配置SSL证书(可自行生成或使用权威机构颁发的证书):

if __name__ == '__main__':
    app.run(
        host='0.0.0.0',
        port=5000,
        ssl_context=('cert.pem', 'key.pem')  # 替换为你的证书和密钥文件路径
    )

配置完成后,Flutter端可继续使用wss://10.0.2.2:5000/echo进行连接。

验证通信

修改后重启Flask服务器和Flutter应用,测试双向通信:

  • 发送消息到服务器:
channel.sink.add('Hello Flask!');
  • 监听服务器返回:
channel.stream.listen((message) {
  print('Received: $message');
});

内容的提问来源于stack exchange,提问作者stevenkucera

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 18:58:34