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

Android模拟器使用InetAddress获取IP地址异常如何解决

问题原因

你看到的异常拼接IP不是模拟器故障导致的,isSiteLocalAddress()判断规则会同时匹配IPv4和IPv6的站点本地地址,你的代码没有做地址类型区分,直接将返回的IPv6地址、IPv4地址拼接成了字符串,才会出现这个现象。
Android模拟器默认分配的10.0.2.15本身就是正确的虚拟网卡IPv4地址,不属于错误返回值。

方案1:修改代码过滤IPv4地址(推荐,全环境兼容无需调整配置)

新增地址类型判断,只收集IPv4的站点本地地址即可,修改后的代码如下:

public String getIpAddress() {
    String ip = "";
    try {
        Enumeration<NetworkInterface> enumNetworkInterfaces = NetworkInterface
                .getNetworkInterfaces();
        while (enumNetworkInterfaces.hasMoreElements()) {
            NetworkInterface networkInterface = enumNetworkInterfaces
                    .nextElement();
            Enumeration<InetAddress> enumInetAddress = networkInterface
                    .getInetAddresses();
            while (enumInetAddress.hasMoreElements()) {
                InetAddress inetAddress = enumInetAddress.nextElement();
                // 新增判断:只取IPv4的站点本地地址
                if (inetAddress.isSiteLocalAddress() && inetAddress instanceof Inet4Address) {
                    ip += "SiteLocalAddress: "
                            + inetAddress.getHostAddress() + "\n";
                }
            }
        }
    } catch (SocketException e) {
        e.printStackTrace();
        ip += "Something Wrong! " + e.toString() + "\n";
    }
    return ip;
}

修改后真机运行逻辑不变,模拟器也只会返回正确的IPv4地址。

方案2:调整模拟器配置禁用IPv6

如果不想修改代码,可以通过关闭模拟器IPv6支持解决问题:

  • 启动模拟器后打开系统设置,进入「网络和互联网」页面,点击当前连接的WLAN网络
  • 点击编辑按钮,将IP设置改为「静态」
  • 关闭IPv6开关,保存配置后重启模拟器即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 17:24:03