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

如何在Xamarin Forms中获取开发所用主机的IPv4地址

Xamarin Forms 获取开发主机IPv4地址实现方案

适用场景

代码运行在开发主机侧,需要排除虚拟机虚拟网卡、环回地址,拿到物理网卡的真实IPv4地址。

实现代码

using System.Linq;
using System.Net;
using System.Net.NetworkInformation;
using System.Net.Sockets;

public static class IpUtils
{
    public static string GetDevelopmentHostPhysicalIPv4()
    {
        // 筛选条件:网卡处于活跃状态、非环回/隧道类型、排除虚拟网卡
        var validNics = NetworkInterface.GetAllNetworkInterfaces()
            .Where(nic => 
                nic.OperationalStatus == OperationalStatus.Up
                // C# 9+语法,低版本可替换为 != 拼接判断
                && nic.NetworkInterfaceType is not (NetworkInterfaceType.Loopback or NetworkInterfaceType.Tunnel)
                // 可根据自己安装的虚拟机类型补充过滤关键词
                && !nic.Description.Contains("Virtual")
                && !nic.Description.Contains("VMware")
                && !nic.Description.Contains("Hyper-V")
                && !nic.Description.Contains("VirtualBox"));

        foreach (var nic in validNics)
        {
            var ipProps = nic.GetIPProperties();
            // 取第一个有效的IPv4地址
            var targetIp = ipProps.UnicastAddresses
                .FirstOrDefault(addr => addr.Address.AddressFamily == AddressFamily.InterNetwork);

            if (targetIp != null)
            {
                return targetIp.Address.ToString();
            }
        }

        // 兜底返回环回地址,可按需求修改异常逻辑
        return IPAddress.Loopback.ToString();
    }
}

特殊场景说明

如果你是在模拟器/真机上调试APP,需要访问开发主机的本地服务,不需要额外写代码获取IP:

  • 安卓模拟器直接使用预留地址10.0.2.2即可映射到开发主机
  • iOS模拟器直接使用localhost或127.0.0.1即可访问开发主机
  • 真机调试需保证设备和开发主机在同一局域网,先在开发主机运行上述函数拿到IP,填入APP的调试配置即可

注意事项

  • 多网卡环境下(同时连接WiFi和有线网),可以在筛选逻辑中添加优先级判断,优先取你需要的网卡IP
  • 生产发布时请移除开发调试相关的IP逻辑,替换为正式服务器地址

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 01:39:06