WSL2环境下Flutter连接VM Service遇SocketException连接拒绝问题
解决WSL2中Flutter连接Windows模拟器VM Service被拒绝的问题
1. 打通WSL2与Windows的adb服务
- 在WSL2里关闭本地adb服务:
adb kill-server - 获取Windows主机的网关IP(WSL2访问Windows的入口):
cat /etc/resolv.conf | grep nameserver | awk '{print $2}' - 设置WSL2的adb指向Windows端的服务:
export ADB_SERVER_SOCKET=tcp:<刚才拿到的WindowsIP>:5037 - 启动adb:
adb start-server,执行adb devices能看到Windows模拟器就说明adb连通正常
2. 转发VM Service端口到WSL2
- Flutter在Windows模拟器上启动的VM Service默认是随机端口(比如你的43678),需要把这个端口从Windows映射到WSL2:
- 在WSL2里获取自身IP:
hostname -I | awk '{print $1}' - 打开Windows管理员权限的PowerShell,执行端口转发命令:
netsh interface portproxy add v4tov4 listenport=43678 listenaddress=0.0.0.0 connectport=43678 connectaddress=<WSL2的IP>
- 在WSL2里获取自身IP:
- 嫌随机端口麻烦的话,运行Flutter时强制指定固定端口:
flutter run --vm-service-port=43678
3. 修复VSCode构建失败问题
- 打开VSCode设置,搜索
dart.flutterAdditionalArgs,添加配置项:["--vm-service-port=43678"],确保运行时用固定端口 - 把ADB_SERVER_SOCKET的配置写到WSL2的shell配置文件(比如
~/.bashrc或~/.zshrc)中,避免每次重启都要设置:
编辑文件添加:export ADB_SERVER_SOCKET=tcp:<Windows主机IP>:5037,执行source ~/.bashrc生效
4. 排查连通性问题
- 在WSL2里执行
telnet <Windows主机IP> 43678,能连通说明端口转发没问题 - 如果还是被拒绝,检查Windows防火墙是否允许该端口的入站连接,或临时关闭防火墙测试
内容的提问来源于stack exchange,提问作者Daniel Wagner
相关产品推荐
相关产品推荐

