在 Unity 中获取本机 IP 地址的原理是基于操作系统提供的网络信息接口,通过 .NET 框架或相关的网络库来查询本机的网络配置信息,从中提取出 IP 地址。下面分别介绍获取 IPv4 和 IPv6 地址的常见原理和实现方式。
获取 IPv4 地址
原理
在 Windows 或其他操作系统中,网络适配器会维护一系列的网络配置信息,包括 IP 地址。.NET 框架提供了 System.Net 命名空间,其中的 Dns 类和 NetworkInterface 类可以帮助我们获取这些信息。通过 Dns.GetHostEntry 方法可以获取本地主机的信息,然后从主机信息中筛选出 IPv4 地址。
代码如下:
using UnityEngine;
using System.Net;
using System.Net.Sockets;
public class GetLocalIPv4 : MonoBehaviour
{
void Start()
{
string localIPv4 = GetLocalIPAddress();
Debug.Log("本机 IPv4 地址: " + localIPv4);
}
string GetLocalIPAddress()
{
string hostName = Dns.GetHostName();
IPHostEntry hostEntry = Dns.GetHostEntry(hostName);
foreach (IPAddress ip in hostEntry.AddressList)
{
if (ip.AddressFamily == AddressFamily.InterNetwork)
{
return ip.ToString();
}
}
return "未找到 IPv4 地址";
}
}
获取 IPv6 地址
原理
获取 IPv6 地址的原理与获取 IPv4 地址类似,同样是通过 Dns.GetHostEntry 方法获取主机信息,然后筛选出地址族为 AddressFamily.InterNetworkV6 的 IP 地址。
代码如下:
using UnityEngine;
using System.Net;
using System.Net.Sockets;
public class GetLocalIPv6 : MonoBehaviour
{
void Start()
{
string localIPv6 = GetLocalIPv6Address();
Debug.Log("本机 IPv6 地址: " + localIPv6);
}
string GetLocalIPv6Address()
{
string hostName = Dns.GetHostName();
IPHostEntry hostEntry = Dns.GetHostEntry(hostName);
foreach (IPAddress ip in hostEntry.AddressList)
{
if (ip.AddressFamily == AddressFamily.InterNetworkV6)
{
return ip.ToString();
}
}
return "未找到 IPv6 地址";
}
}
与获取 IPv4 地址的代码类似,只是在筛选 IP 地址时,将条件改为 ip.AddressFamily == AddressFamily.InterNetworkV6 以获取 IPv6 地址。