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
相关产品推荐
相关产品推荐

