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

Flutter应用Android端Socket.IO连接超时问题求助

Flutter WebSocket连接超时(手机端)排查方案

1. 先确认基础网络连通性

  • 手机端打开浏览器,访问http://192.168.203.48:3000,如果无法加载内容,说明网络层面有问题:
    • 检查PC和手机是否在同一Wi-Fi局域网,避免跨网段(比如PC连有线,手机连另一个Wi-Fi)。
    • 关闭PC端防火墙/杀毒软件,或者手动放行3000端口的入站请求。
    • 确认服务器监听地址是0.0.0.0而非127.0.0.1,后者仅允许本地访问,局域网设备无法连接。

2. 检查Socket.IO版本与配置匹配

  • 确保Flutter端socket_io_client版本和服务器端Socket.IO版本兼容(比如服务器用v4.x,客户端对应v4.x的包,版本差异会导致握手失败)。
  • 调整客户端连接配置:
    socket = IO.io('http://192.168.203.48:3000', <String, dynamic>{
      'autoConnect': false,
      'transports': ["polling", "websocket"], // 优先用polling建立连接再升级
      'timeout': 10000, // 延长超时时间,适配手机网络延迟
      'query': {'id': user_id}
    });
    

3. 针对移动端平台的特殊配置

  • Android真机:无需额外配置,但必须使用PC的局域网IP(不能用10.0.2.2,这个是模拟器专用)。
  • iOS真机:需修改Info.plist允许非HTTPS连接:
    添加以下配置到Info.plist:
    <key>NSAppTransportSecurity</key>
    <dict>
        <key>NSAllowsArbitraryLoads</key>
        <true/>
    </dict>
    
    (或者更严格地指定服务器IP在NSExceptionDomains中,避免全局放开)
  • 如果尝试443端口:必须改用wss://协议头(WebSocket加密协议),且服务器需配置HTTPS证书,否则无法建立连接。

4. 服务器端跨域与监听配置

  • 服务器端开启跨域支持,以Node.js为例:
    const io = require('socket.io')(server, {
      cors: {
        origin: "*", // 允许所有来源,生产环境建议指定具体域名/包名
        methods: ["GET", "POST"]
      }
    });
    
  • 确认服务器端口未被其他程序占用,可通过netstat -ano | findstr :3000(Windows)或lsof -i :3000(Mac/Linux)检查。

5. 调试定位问题

  • 服务器端添加日志,查看是否收到手机端的连接请求:
    io.on('connection', (socket) => {
      console.log('新连接:', socket.handshake.query.id);
    });
    
    如果无日志输出,说明网络未通;如果有日志但后续断开,说明协议或握手配置有问题。
  • 用手机抓包工具(如Charles)分析请求,查看具体错误码(如403、500)或连接拒绝原因。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 19:39:54