我正在开发的 C++ 跨平台应用程序需要枚举设备上的所有活动 IP 并区分 Wi-Fi IP 和热点 IP。我的方法是比较 IP 接口名称。在 Android 和 iOS 等平台上,接口名称的差异足以区分它们(使用 Linux 的 getifaddrs() 和 ioctl(socket、SIOCGIFCONF、&ifconf) 等函数)。 例如,在 iOS 上,Wi-Fi 接口始终具有名称“en0”,而热点接口名称始终以字符串“bridge”开头(例如“bridge100”)。
我现在的目标是 Windows Phone 8.1:
WP8.1 不支持它们,并且它们不提供接口名称。
有人能指出我正确的方向吗?
快速入门:检索网络连接信息文章。当然,它概述了 JavaScript 库调用,但它们在 C++/C# 中是类似的。例如,使用 NetworkInformation.GetConnectionProfiles 方法,您的代码可能类似于:
// Retrieve all active connections
var connectionProfiles = NetworkInformation.GetConnectionProfiles();
foreach (var connProfile in connectionProfiles)
{
// Get all network names that alias this connection's IP
var theNames = connProfile.GetNetworkNames();
if (theNames.Any(name => name == "My Desired Name"))
{
// Do the thing
}
}
ConnectionProfile 类还包含一个
ProfileName 属性,该属性可能在某种程度上指示此配置文件标识的连接类型,但我怀疑这不一定是您正在寻找的信息类型。
关于识别连接类型,您可以使用NetworkAdapter 属性对象的 IanaInterfaceType 属性来获取有关连接类型的更多信息。
foreach (var connProfile in connectionProfiles)
{
if (connProfile.NetworkAdapter.IanaInterfaceType == 71) {
// Take action related to IEEE 802.11 wireless network connection
}
}
通用 Windows 8.1 运行时支持这些方法和属性。