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

如何在InternetAddress.lookup中添加多个主机实现多域名查询?

同时监听多个主机地址的网络连通性实现方案

你的代码错误在于InternetAddress.lookup()方法仅支持传入单个主机地址,不能用&&拼接两个域名,这既不符合语法规则,也无法实现同时查询多个主机的需求。以下是两种常见场景的正确实现方式:

场景1:任意一个主机连通即判定网络正常

如果只要google.com或bing.com其中一个能解析成功,就认为网络可用,可以用Future.any实现,它会返回第一个成功完成的异步任务结果:

try {
  // 同时发起两个主机的解析请求
  final googleLookup = InternetAddress.lookup('google.com');
  final bingLookup = InternetAddress.lookup('bing.com');
  
  // 等待任意一个请求成功
  final result = await Future.any([googleLookup, bingLookup]);
  if (result.isNotEmpty && result[0].rawAddress.isNotEmpty) {
    isConnected = true;
  }
} catch (e) {
  // 两个主机都解析失败时,标记为无网络
  isConnected = false;
}

场景2:所有主机都连通才判定网络正常

如果要求google.com和bing.com都能解析成功才认为网络可用,使用Future.wait等待所有异步任务完成,再逐一验证结果:

try {
  // 同时发起两个解析请求,等待全部完成
  final List<List<InternetAddress>> allResults = await Future.wait([
    InternetAddress.lookup('google.com'),
    InternetAddress.lookup('bing.com'),
  ]);
  
  // 分别验证两个主机的解析结果
  final googleValid = allResults[0].isNotEmpty && allResults[0][0].rawAddress.isNotEmpty;
  final bingValid = allResults[1].isNotEmpty && allResults[1][0].rawAddress.isNotEmpty;
  
  // 只有两个都有效才标记为网络正常
  isConnected = googleValid && bingValid;
} catch (e) {
  // 任意一个主机解析失败,标记为无网络
  isConnected = false;
}

更灵活的封装方式

可以把单个主机的连通性检查封装成独立函数,方便复用和扩展更多主机:

// 封装单个主机的连通性检查逻辑
Future<bool> isHostReachable(String host) async {
  try {
    final result = await InternetAddress.lookup(host);
    return result.isNotEmpty && result[0].rawAddress.isNotEmpty;
  } catch (_) {
    return false;
  }
}

// 使用示例
void checkNetwork() async {
  // 同时检查多个主机
  final results = await Future.wait([
    isHostReachable('google.com'),
    isHostReachable('bing.com'),
  ]);
  
  // 逻辑或:任意一个主机可达即认为网络正常
  isConnected = results.any((isReachable) => isReachable);
  
  // 若需要逻辑与:所有主机都可达才认为网络正常,替换为下面一行
  // isConnected = results.every((isReachable) => isReachable);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 07:15:50