如何在 Win 10 UWP 项目上找到本地 IP 地址
How do I find the local IP address on a Win 10 UWP project
我目前正在尝试将管理控制台应用程序移植到 Win 10 UWP 应用程序。我在使用以下控制台代码中的 System.Net.Dns 时遇到问题。
如何获取设备IP
这是我尝试移植的控制台应用程序代码。
public static string GetIP4Address()
{
string IP4Address = String.Empty;
foreach (IPAddress IPA in Dns.GetHostAddresses(Dns.GetHostName()))
{
if (IPA.AddressFamily == AddressFamily.InterNetwork)
{
IP4Address = IPA.ToString();
break;
}
}
return IP4Address;
}
使用它来获取 UWP 应用程序中的主机 IP 地址,我已经测试过了:
foreach (HostName localHostName in NetworkInformation.GetHostNames())
{
if (localHostName.IPInformation != null)
{
if (localHostName.Type == HostNameType.Ipv4)
{
textblock.Text = localHostName.ToString();
break;
}
}
}
并查看 API 文档 here
您可以这样尝试:
private string GetLocalIp()
{
var icp = NetworkInformation.GetInternetConnectionProfile();
if (icp?.NetworkAdapter == null) return null;
var hostname =
NetworkInformation.GetHostNames()
.SingleOrDefault(
hn =>
hn.IPInformation?.NetworkAdapter != null && hn.IPInformation.NetworkAdapter.NetworkAdapterId
== icp.NetworkAdapter.NetworkAdapterId);
// the ip address
return hostname?.CanonicalName;
}
上面的回答也对
基于@John Zhang 的回答,但修复了不抛出关于多个匹配项的 LINQ 错误和 return Ipv4 地址:
public static string GetFirstLocalIp(HostNameType hostNameType = HostNameType.Ipv4)
{
var icp = NetworkInformation.GetInternetConnectionProfile();
if (icp?.NetworkAdapter == null) return null;
var hostname =
NetworkInformation.GetHostNames()
.FirstOrDefault(
hn =>
hn.Type == hostNameType &&
hn.IPInformation?.NetworkAdapter != null &&
hn.IPInformation.NetworkAdapter.NetworkAdapterId == icp.NetworkAdapter.NetworkAdapterId);
// the ip address
return hostname?.CanonicalName;
}
显然,您可以传递 HostNameType.Ipv6 而不是 Ipv4,这是获取 Ipv6 地址的默认(隐式)参数值
我目前正在尝试将管理控制台应用程序移植到 Win 10 UWP 应用程序。我在使用以下控制台代码中的 System.Net.Dns 时遇到问题。
如何获取设备IP
这是我尝试移植的控制台应用程序代码。
public static string GetIP4Address()
{
string IP4Address = String.Empty;
foreach (IPAddress IPA in Dns.GetHostAddresses(Dns.GetHostName()))
{
if (IPA.AddressFamily == AddressFamily.InterNetwork)
{
IP4Address = IPA.ToString();
break;
}
}
return IP4Address;
}
使用它来获取 UWP 应用程序中的主机 IP 地址,我已经测试过了:
foreach (HostName localHostName in NetworkInformation.GetHostNames())
{
if (localHostName.IPInformation != null)
{
if (localHostName.Type == HostNameType.Ipv4)
{
textblock.Text = localHostName.ToString();
break;
}
}
}
并查看 API 文档 here
您可以这样尝试:
private string GetLocalIp()
{
var icp = NetworkInformation.GetInternetConnectionProfile();
if (icp?.NetworkAdapter == null) return null;
var hostname =
NetworkInformation.GetHostNames()
.SingleOrDefault(
hn =>
hn.IPInformation?.NetworkAdapter != null && hn.IPInformation.NetworkAdapter.NetworkAdapterId
== icp.NetworkAdapter.NetworkAdapterId);
// the ip address
return hostname?.CanonicalName;
}
上面的回答也对
基于@John Zhang 的回答,但修复了不抛出关于多个匹配项的 LINQ 错误和 return Ipv4 地址:
public static string GetFirstLocalIp(HostNameType hostNameType = HostNameType.Ipv4)
{
var icp = NetworkInformation.GetInternetConnectionProfile();
if (icp?.NetworkAdapter == null) return null;
var hostname =
NetworkInformation.GetHostNames()
.FirstOrDefault(
hn =>
hn.Type == hostNameType &&
hn.IPInformation?.NetworkAdapter != null &&
hn.IPInformation.NetworkAdapter.NetworkAdapterId == icp.NetworkAdapter.NetworkAdapterId);
// the ip address
return hostname?.CanonicalName;
}
显然,您可以传递 HostNameType.Ipv6 而不是 Ipv4,这是获取 Ipv6 地址的默认(隐式)参数值