IUPnPAddressFamilyControl::SetAddressFamily 方法 (upnp.h)
SetAddressFamily 方法设置 Device Finder 对象的地址系列标志,该对象使用此标志筛选找到的设备。
应用程序在开始搜索之前设置地址系列标志。 应用程序将仅收到有关具有指定地址系列 IP 地址的设备通知。
语法
HRESULT SetAddressFamily(
[in] LONG dwFlags
);
参数
[in] dwFlags
整数 (4 字节值) ,指定设备查找器对象用于筛选找到的设备的地址系列。
以下值有效。
值 | 含义 |
---|---|
|
IPv4 (IP 版本 4) |
|
IPv6 (IP 版本 6) |
|
IPv4 和 IPv6 |
返回值
如果方法成功,则返回值S_OK。 否则,方法将返回 WinError.h 中定义的 COM 错误代码之一。
注解
设置标志
必须在适当的时间设置地址系列标志,以便影响搜索:
- 对于异步搜索,请在调用 IUPnPDeviceFinder::CreateAsyncFind 方法之前设置地址系列标志。
- 对于同步搜索,请在调用 IUPnPDeviceFinder::FindByUDN 或 IUPnPDeviceFinder::FindByType 方法之前设置地址系列标志。
筛选找到的设备
方案 1:控制点应用程序将地址系列标志设置为UPNP_ADDRESSFAMILY_IPV4,然后开始搜索:
- 如果设备查找器发现具有 IPv6 地址的设备,设备查找器不会通知应用程序该设备。 如果同一设备以后获取 IPv4 地址,设备查找器将通知应用程序该设备并提供 IPv4 地址。
- 如果设备查找器发现具有 IPv4 地址的设备,设备查找器将通知应用程序该设备并提供 IPv4 地址。 如果同一设备后来获取 IPv6 地址,设备查找器不会通知应用程序设备的其他地址。
- 如果设备查找器发现同时具有 IPv4 和 IPv6 地址的设备,它将通知应用程序该设备,但它将仅提供 IPv4 地址。
- 如果应用程序已知的设备宣布地址更改,则仅当新地址为 IPv4 地址时,设备查找器才会通知应用程序更改。
- 如果应用程序已知的设备同时具有 IPv4 和 IPv6 地址,并且设备查找器从设备的 IPv6 地址收到一条告别消息,则即使应用程序仅知道 IPv4 地址,设备查找器也会通知应用程序。 换句话说,如果应用程序已知的设备离开网络,设备查找器将通知应用程序,而不考虑设备的地址。
方案 2:应用程序将地址系列标志设置为UPNP_ADDRESSFAMILY_IPV6,然后开始搜索:
- 应用场景 1 中所述的一组类似的规则,但适用于相反的地址系列。
方案 3:应用程序将地址系列标志设置为UPNP_ADDRESSFAMILY_BOTH,然后开始搜索:
- 如果设备查找器发现具有 IPv4 地址或 IPv6 地址的设备,设备查找器将通知应用程序该设备并提供地址。 如果同一设备后来获取了不同地址系列的地址,则设备查找器不会通知应用程序设备的其他地址。
- 如果设备查找器发现同时具有 IPv4 和 IPv6 地址的设备,它将通知应用程序该设备,但它只提供随机选择的其中一个地址。
- 如果应用程序已知的设备宣布地址更改,设备查找器将通知应用程序更改。
- 如果应用程序已知的设备离开网络,设备查找器将通知应用程序。
要求
最低受支持的客户端 | Windows Vista [仅限桌面应用] |
最低受支持的服务器 | 无受支持的版本 |
目标平台 | Windows |
标头 | upnp.h |
DLL | Upnp.dll |