Flutter项目使用Socket.IO生产环境报ERR_ADDRESS_INVALID错误求助
Flutter Socket.IO生产环境连接错误:ERR_ADDRESS_INVALID
问题描述
生产环境下使用Socket.IO连接时触发错误:
GET https://s10onilover.izisoft.io:0/socket.io/?EIO=4&transport=polling net::ERR_ADDRESS_INVALID
环境信息
- Flutter版本:3.22.3
- socket_io_client版本:^3.0.2
初始化Socket代码
void initialize() { socket = IO.io( SocketEndPoint.SOCKET_URL, IO.OptionBuilder().enableAutoConnect().build(), ); socket.io.options?['extraHeaders'] = {'authorization': 'Bearer ${sl.get<SharedPreferenceHelper>().getJwtToken}'}; if (socket.disconnected) { socket ..disconnect() ..connect(); socket.onConnect( (_) { _joinRoomConversation(); }, ); } }
错误截图

问题分析与解决方案
核心问题:无效端口:0
错误URL里的:0是关键——端口0是无效的,说明你的SocketEndPoint.SOCKET_URL生产环境配置存在错误,可能是:
- 配置值误加了多余的冒号(比如写成
https://xxx.xxx.io:) - 环境变量注入时端口值被错误设为0
- 后端Socket服务端口配置未同步到客户端
修复步骤
修正SOCKET_URL配置
确保生产环境的SocketEndPoint.SOCKET_URL是合法格式:- HTTPS默认端口443,可直接写
https://s10onilover.izisoft.io - 若后端用自定义端口,需写完整地址,比如
https://s10onilover.izisoft.io:3000(替换3000为实际端口) - 绝对不能带
:0或无意义的端口后缀
- HTTPS默认端口443,可直接写
优化Socket初始化代码
原代码存在逻辑冲突(enableAutoConnect()与手动disconnect()重复操作),且headers设置方式不规范,建议修改为:void initialize() { final jwtToken = sl.get<SharedPreferenceHelper>().getJwtToken; socket = IO.io( SocketEndPoint.SOCKET_URL, IO.OptionBuilder() .enableAutoConnect() .setExtraHeaders({'authorization': 'Bearer $jwtToken'}) .setTransports(['websocket', 'polling']) // 优先使用websocket传输 .build(), ); socket.onConnect((_) { _joinRoomConversation(); }); // 仅在未连接时手动触发连接 if (!socket.connected) { socket.connect(); } }额外排查项
- 验证后端Socket服务可用性:用浏览器访问修正后的
https://s10onilover.izisoft.io/socket.io/,确认能返回Socket.IO的基础响应 - 检查网络权限:安卓确保
AndroidManifest.xml添加了<uses-permission android:name="android.permission.INTERNET"/>;iOS确保Info.plist配置了网络访问权限
- 验证后端Socket服务可用性:用浏览器访问修正后的
内容的提问来源于stack exchange,提问作者TechMind
相关产品推荐
相关产品推荐

