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

Flutter使用socket_io_client连接SocketIO无响应该如何解决?

问题排查及解决方案
  • 事件名称使用错误
    Socket.IO 客户端监听连接成功的事件为connect,你代码中使用的connection是服务端侧的连接事件,客户端不会触发该事件,自然不会打印对应日志。
  • 事件监听顺序错误
    你在调用connect()方法后才绑定事件监听,若连接建立速度快于事件绑定速度,回调会被遗漏,需要将所有事件监听逻辑放在connect()调用之前。
  • 缺少异常、断开相关事件监听
    当前仅监听了错误的连接事件,无法捕获连接失败、断开等异常情况,需要补充相关事件监听排查问题。
  • 版本不匹配
    socket_io_client版本需要与服务端部署的 Socket.IO 版本严格对应:
    • socket_io_client v1.x 对应服务端 Socket.IO v2.x
    • socket_io_client v2.x 对应服务端 Socket.IO v3/v4.x
      版本不匹配会出现无报错无法连接的情况。
  • 安卓端明文 HTTP 权限限制
    如果应用运行在安卓9及以上系统,使用 HTTP 协议的服务端地址需要在android/app/src/main/AndroidManifest.xml的application标签中添加android:usesCleartextTraffic="true"配置,否则明文请求会被系统拦截。
  • Web端跨域限制
    如果是Web端运行,需要确认服务端配置了正确的CORS规则,否则跨域请求会被浏览器拦截,也会出现无报错无法连接的情况。

修正后的参考代码

import 'package:socket_io_client/socket_io_client.dart' as IO;

@override
void initState() {
  super.initState();
  _messageController = TextEditingController();
  _controller = ScrollController();
  connectSocket();
}

connectSocket() async {
  print('Connecting to chat service');
  socket = IO.io('http://替换为你的服务端实际地址', <String, dynamic>{
    'transports': ['websocket'],
    'autoConnect': false,
  });
  // 所有事件监听放在connect调用之前
  socket.on('connect', (_) {
    print('连接成功');
  });
  socket.on('connect_error', (err) {
    print('连接出错: $err');
  });
  socket.on('connect_timeout', (data) {
    print('连接超时: $data');
  });
  socket.on('disconnect', (data) {
    print('连接断开: $data');
  });
  socket.connect();
}

内容的提问来源于stack exchange,提问作者Shruti Ramnandan Sharma

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 09:09:03