From 044990cad5497b621799850e4536dddc36ad8d17 Mon Sep 17 00:00:00 2001 From: liyi Date: Wed, 12 Feb 2025 16:07:03 +0800 Subject: [PATCH] =?UTF-8?q?fix:=E8=B0=83=E6=95=B4=E8=A7=A3=E6=9E=90?= =?UTF-8?q?=E4=B8=AD=E7=BB=A7=E5=9C=B0=E5=9D=80=E6=97=B6=E5=85=BC=E5=AE=B9?= =?UTF-8?q?=E5=9F=9F=E5=90=8D=E5=9C=B0=E5=9D=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/talk/starChart/star_chart_manage.dart | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/lib/talk/starChart/star_chart_manage.dart b/lib/talk/starChart/star_chart_manage.dart index 15d7be11..04457339 100644 --- a/lib/talk/starChart/star_chart_manage.dart +++ b/lib/talk/starChart/star_chart_manage.dart @@ -186,7 +186,7 @@ class StartChartManage { for (int i = 0; i <= relayInfoEntity.relay_list!.length; i++) { final data = relayInfoEntity.relay_list?[i]; if (data?.peerID != FromPeerId) { - final parseUdpUrl = _parseUdpUrl(data?.listenAddr ?? ''); + final parseUdpUrl = await _parseUdpUrl(data?.listenAddr ?? ''); remoteHost = parseUdpUrl['host'] ?? ''; remotePort = parseUdpUrl['port'] ?? ''; relayPeerId = data?.peerID ?? ''; @@ -893,8 +893,8 @@ class StartChartManage { } /// 解析 UDP URL 并提取 IP 地址和端口号 - Map _parseUdpUrl(String url) { - // 修改正则表达式以匹配 IP 地址或域名 + /// 解析 UDP URL 并提取 IP 地址和端口号,同时处理域名解析 + Future> _parseUdpUrl(String url) async { final regex = RegExp(r'udp://([a-zA-Z0-9.-]+):(\d+)').firstMatch(url); if (regex != null) { @@ -903,7 +903,20 @@ class StartChartManage { final port = int.tryParse(portStr ?? ''); if (host != null && port != null) { - return {'host': host, 'port': port}; + try { + // 尝试进行 DNS 解析 + final List addresses = + await InternetAddress.lookup(host); + if (addresses.isEmpty) { + throw FormatException('DNS resolution failed for $host'); + } + + // 使用解析后的第一个 IP 地址 + final String resolvedIp = addresses.first.address; + return {'host': resolvedIp, 'port': port}; + } catch (e) { + throw FormatException('DNS resolution error for $host: $e'); + } } } throw FormatException('无法解析 URL 格式: $url');