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

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生产环境配置存在错误,可能是:

  1. 配置值误加了多余的冒号(比如写成https://xxx.xxx.io:)
  2. 环境变量注入时端口值被错误设为0
  3. 后端Socket服务端口配置未同步到客户端

修复步骤

  1. 修正SOCKET_URL配置
    确保生产环境的SocketEndPoint.SOCKET_URL是合法格式:

    • HTTPS默认端口443,可直接写https://s10onilover.izisoft.io
    • 若后端用自定义端口,需写完整地址,比如https://s10onilover.izisoft.io:3000(替换3000为实际端口)
    • 绝对不能带:0或无意义的端口后缀
  2. 优化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();
      }
    }
    
  3. 额外排查项

    • 验证后端Socket服务可用性:用浏览器访问修正后的https://s10onilover.izisoft.io/socket.io/,确认能返回Socket.IO的基础响应
    • 检查网络权限:安卓确保AndroidManifest.xml添加了<uses-permission android:name="android.permission.INTERNET"/>;iOS确保Info.plist配置了网络访问权限

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 00:16:11