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
相关产品推荐
相关产品推荐

