IUPnPAddressFamilyControl::SetAddressFamily 方法 (upnp.h)
SetAddressFamily方法會設定 Device Finder 物件的位址系列旗標,它會使用此旗標來篩選找到的裝置。
應用程式會在開始搜尋之前設定位址系列旗標。 應用程式只會收到具有指定位址系列之 IP 位址之裝置的通知。
語法
HRESULT SetAddressFamily(
[in] LONG dwFlags
);
參數
[in] dwFlags
整數 (4 位元組值) ,指定要由 Device Finder 物件用來篩選找到的裝置的位址系列。
下列值有效。
值 | 意義 |
---|---|
|
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 位址的裝置,Device Finder 會通知裝置的應用程式並提供 IPv4 位址。 如果相同裝置稍後取得 IPv6 位址,裝置尋找工具將不會通知應用程式裝置的其他位址。
- 如果 Device Finder 發現同時具有 IPv4 和 IPv6 位址的裝置,它會通知裝置的應用程式,但只會提供 IPv4 位址。
- 如果應用程式已知的裝置宣佈位址變更,則只有在新位址是 IPv4 位址時,裝置尋找工具才會通知應用程式變更。
- 如果應用程式知道的裝置同時有 IPv4 和 IPv6 位址,而 Device Finder 會從裝置的 IPv6 位址收到 bye bye 訊息,即使應用程式只知道 IPv4 位址,裝置尋找程式還是會通知應用程式。 換句話說,如果應用程式知道的裝置離開網路,則不論裝置的位址為何,裝置尋找器都會通知應用程式。
案例 2:應用程式會將位址系列旗標設定為UPNP_ADDRESSFAMILY_IPV6,然後啟動搜尋:
- 類似案例 1 中所述的一組類似的規則會套用,但適用于相反的位址系列。
案例 3:應用程式會將位址系列旗標設定為UPNP_ADDRESSFAMILY_BOTH,然後啟動搜尋:
- 如果 Device Finder 發現有 IPv4 位址或 IPv6 位址的裝置,Device Finder 會通知裝置的應用程式並提供位址。 如果相同裝置稍後取得不同位址系列的位址,Device Finder 將不會通知應用程式裝置的其他位址。
- 如果 Device Finder 發現同時具有 IPv4 和 IPv6 位址的裝置,它會通知裝置的應用程式,但只會提供其中一個位址,並隨機播放。
- 如果應用程式已知的裝置宣佈位址變更,裝置尋找工具會通知應用程式變更。
- 如果應用程式已知的裝置離開網路,裝置尋找工具會通知應用程式。
需求
最低支援的用戶端 | Windows Vista [僅限傳統型應用程式] |
最低支援的伺服器 | 都不支援 |
目標平台 | Windows |
標頭 | upnp.h |
Dll | Upnp.dll |