Flutter与Node.js使用Socket.io连接时出现连接拒绝错误求助
解决Flutter Socket.io连接Node.js服务器出现Connection refused的问题
以下是针对你遇到的连接拒绝错误的具体解决步骤:
1. 修正客户端连接地址
如果是在Android模拟器上测试,localhost指向的是模拟器自身,无法访问电脑上的Node.js服务器,必须替换为模拟器的映射IP:
final String url = 'http://10.0.2.2:5000';
如果是真机测试,需要使用电脑的局域网IP(比如http://192.168.1.105:5000),确保手机和电脑在同一Wi-Fi网络下;iOS模拟器可以直接使用localhost。
2. 匹配Socket.io版本兼容性
Flutter的socket_io_client依赖版本必须和Node.js端的socket.io版本匹配,否则会出现连接失败。比如服务端用socket.io v4.x,客户端就对应socket_io_client v2.x或v4.x:
- Flutter的pubspec.yaml:
dependencies: socket_io_client: ^2.0.3
- Node.js的package.json:
"dependencies": { "socket.io": "^4.7.2" }
3. 配置服务器跨域权限
Node.js端的Socket.io默认会拦截跨域请求,需要在初始化时配置CORS允许客户端访问:
const io = require("socket.io")(httpServer, { cors: { origin: "*", // 开发环境可临时用*,生产环境需指定具体域名 methods: ["GET", "POST"] } });
4. 验证服务器状态
- 启动服务器后,确认控制台输出
Listening on port 5000,说明服务器正常启动; - 用浏览器访问
http://localhost:5000,能正常访问则说明服务端口没问题; - 检查端口是否被占用:Mac/Linux用
lsof -i :5000,Windows用netstat -ano | findstr :5000,若被占用则更换端口或关闭占用程序。
内容的提问来源于stack exchange,提问作者Andrea Tirenti
相关产品推荐
相关产品推荐

