You need to enable JavaScript to run this app. Flutter真机debug下Socket.connect()连接超时 加权限无效
优惠活动
大模型
产品
解决方案
定价
更多

Flutter真机debug下Socket.connect()连接超时 加权限无效

真机调试Flutter Socket连接超时排查步骤

基础连通性排查

  • 确认Flutter运行的真机、部署Python TCP服务的电脑接入同一二层局域网,关闭路由器AP隔离功能。多数家用路由器默认开启客户端隔离,即便同连接一个WiFi,设备间也无法直接互访。
  • 跳过Flutter环节,直接用手机自带浏览器、网络调试工具访问192.168.0.159:5431,验证手机本身能否触达目标地址。报错中的errno=110是Android系统层返回的连接超时,代表请求包未收到服务器回包,不属于Dart代码逻辑问题。

服务端配置核查

  • 检查Python TCP服务的监听绑定地址,若绑定的是127.0.0.1,服务仅能接收本机回环请求,局域网内其他设备完全无法连通。需要将绑定地址改为0.0.0.0,示例写法:
server_socket.bind(('0.0.0.0', 5431))
  • 检查电脑系统防火墙状态,Windows Defender、macOS防火墙、Linux UFW默认会拦截非常规端口的入站连接,可临时关闭防火墙验证连通性,确认拦截问题后再为Python解释器添加对应端口的入站放行规则。

移动端权限补全

已添加INTERNET权限的前提下,还需要补全两个易遗漏的配置:

  • 适配Android 9(API 28)以上系统的明文流量限制:该版本起系统默认禁止非HTTP类型的明文流量传输,需在AndroidManifest.xml的<application>节点添加属性:
android:usesCleartextTraffic="true"

若不想全局放开明文流量,可单独配置networkSecurityConfig规则,仅放行局域网网段的明文TCP连接。

  • 确认INTERNET权限节点放置在<manifest>根层级下,不要嵌套在<application>或<activity>节点内,位置错误会导致系统无法识别权限申请。

代码层面优化

  • 为Socket.connect方法添加超时参数,缩短无效等待时长,帮助精准定位报错点:
Socket sock = await Socket.connect(
  "192.168.0.159",
  5431,
  timeout: Duration(seconds: 5),
);
  • 不要在App启动第一帧触发Socket连接,等应用完成初始化、拿到有效网络状态后再执行连接逻辑,避免Android系统网络栈未就绪导致的连接超时。

内容的提问来源于stack exchange,提问作者Serif İnanir

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.08 15:27:02