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

Flutter HTTP请求报SocketException连接超时(errno=110)问题求助

Flutter http请求偶发Connection timed out (errno=110)排查修复

问题现象

使用Dart http包向xerarchsolutions.com发起POST请求时,频繁抛出如下报错,仅极少数情况请求成功,问题在Android 8-12版本的真机、模拟器上均能复现:

Unhandled Exception: SocketException: Connection timed out (OS Error: Connection timed out, errno = 110), address = xerarchsolutions.com, port = 40636

已完成的客户端配置:

  • 已在AndroidManifest.xml中添加互联网访问权限
  • 已创建并引入network_security_config.xml配置文件
  • 已在AndroidManifest.xml中添加配置项android:usesCleartextTraffic="true" android:networkSecurityConfig="@xml/network_security_config"

当前network_security_config.xml配置内容:

<?xml version="1.0" encoding="utf-8"?><network-security-config>
<domain-config cleartextTrafficPermitted="true">
    <domain includeSubdomains="true">xerarchsolutions.com</domain>
    <domain includeSubdomains="true">commondatastorage.googleapis.com</domain>
</domain-config>

当前使用的POST请求代码:

getTopics() async {
http.Response response = await http.post(Uri.parse(topicsURL));

String data = response.body;
var topicList = jsonDecode(data)['topics'];
for (var i = 0; i < topicList.length; i++) {
  topics.add({
    'id': topicList[i]['tp_id'],
    'name': topicList[i]['topic'],
    'selected': false,
  });
}}

排查&修复方案

你当前的Android端网络相关配置没有语法错误,偶发请求成功说明配置并非完全失效,不需要反复修改Manifest文件浪费时间,按以下优先级排查即可:

  1. 给请求显式配置超时时间
    Dart http包默认没有设置自定义超时,底层TCP连接超时完全依赖系统默认值,跨网访问境外服务器时链路抖动、丢包很容易触发系统层面的110超时。直接修改请求代码,增加显式超时配置:
getTopics() async {
  // 可根据实际网络情况调整超时时长
  http.Response response = await http.post(Uri.parse(topicsURL))
      .timeout(const Duration(seconds: 15));

  String data = response.body;
  var topicList = jsonDecode(data)['topics'];
  for (var i = 0; i < topicList.length; i++) {
    topics.add({
      'id': topicList[i]['tp_id'],
      'name': topicList[i]['topic'],
      'selected': false,
    });
  }
}
  1. 排查域名解析与服务端连通性
    errno=110超时的另一大常见原因是DNS解析异常,拿到了不可达的节点IP:
  • 先在出问题的真机上(不要用模拟器)用系统自带浏览器直接访问topicsURL的完整地址,如果浏览器也频繁打不开,直接联系服务端运维确认:域名解析配置是否正确、服务器连接数/带宽是否跑满、是否配置了IP段访问拦截规则、对应服务端口是否对外开放
  • 如果浏览器可以稳定打开地址,临时把请求里的域名换成服务器公网IP做直连测试,直连能稳定请求成功的话,说明是运营商LocalDNS污染/解析调度异常,后续接入HTTPDNS即可解决
  1. 核对协议与端口匹配性
  • 如果你的topicsURL是HTTPS开头,现有明文流量配置不会引发问题,但要确认服务器SSL证书在有效期内、由可信CA签发,自签名证书或证书链不完整会导致TLS握手失败,表现为连接超时
  • 如果你的topicsURL是HTTP开头,确认服务器80端口没有被防火墙拦截,不少境外服务商会默认封禁跨区域的80端口访问,也会出现偶发连通、大部分时间超时的现象
  1. 排除测试环境干扰
    Android模拟器的网络栈经过宿主电脑代理转发,本身就存在偶发连接异常,不要以模拟器的测试结果作为判断依据,用真机分别切换WiFi、移动数据测试,确认是否为单一网络环境的限制问题。

内容的提问来源于stack exchange,提问作者Vishnu E R

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 16:18:20