如何在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
相关产品推荐
相关产品推荐

