同步搜尋
Device Finder 物件同時啟用同步和非同步搜尋。 同步搜尋已完成,只有在找到所有可用的裝置之後,才會將控制權傳回給呼叫端應用程式。 若要執行同步搜尋,請使用 IUPnPDeviceFinder 介面的其中一個同步搜尋方法。
注意
同步搜尋至少需要九秒才能傳回。 因為必須多次傳送初始 UDP 搜尋訊息,所以造成延遲。 此重複專案代表基礎網路通訊協定無法運作。 同步搜尋最適合用於命令列介面。 不建議用於圖形化使用者介面。
IUPnPDeviceFinder::FindByType方法會依裝置或服務類型搜尋。 這個方法會採用類型 URI 做為輸入參數,並傳回 Device 物件的集合。 Device 物件代表個別裝置。
下列範例示範如何在 VBScript 中執行裝置的同步搜尋。 每個腳本都會使用 IUPnPDeviceFinder::FindByType,以媒體播放機裝置類型 urn:schemas-upnp-org:device:mediaplayer.v1.00.00的類型 URI () 呼叫。 方法會傳回 Device 物件的集合,這些物件對應于找到的媒體播放機裝置。 如需從集合中擷取個別裝置物件的資訊,請參閱 同步搜尋傳回的裝置集合。
在 VBScript 中依類型搜尋裝置
Dim deviceFinder
Set deviceFinder = CreateObject( "UPnP.UPnPDeviceFinder" )
Dim devices
Set devices = deviceFinder.FindByType( "urn:schemas-upnp-org:device:multidisk-dvd", 0 )
在 C++ 中依類型搜尋裝置
下列範例示範使用 C++ 同步搜尋媒體播放機裝置。 函式會接受 IUPnPDeviceFinder 介面的指標做為輸入,並傳回 IUPnPDevices 介面指標。
此範例會先配置 BSTR 來代表裝置類型 URI,然後將它傳遞至 IUPnPDeviceFinder::FindByType 方法。 它也會在緩衝區中傳遞本機 IUPnPDevices 指標的位址,該方法接著會儲存找到的裝置集合。 如果函式呼叫成功,它會傳回這個集合的指標。
#include <windows.h>
#include <upnp.h>
#include <stdio.h>
#pragma comment(lib, "oleaut32.lib")
IUPnPDevices *FindMediaPlayerDevices(IUPnPDeviceFinder *pDeviceFinder)
{
HRESULT hr = S_OK;
IUPnPDevices * pFoundDevices = NULL;
BSTR bstrTypeURI = NULL;
bstrTypeURI =
SysAllocString(L"urn:schemas-upnp-org:device:multidisk-dvd");
if (bstrTypeURI)
{
hr = pDeviceFinder->FindByType(bstrTypeURI,
0,
&pFoundDevices);
if (SUCCEEDED(hr))
{
wprintf(L"FindMediaPlayerDevices(): "
L"Search returned successfully\n");
}
else
{
fwprintf(stderr, L"FindMediaPlayerDevices(): "
L"FindByType search failed - returned "
L"HRESULT 0x%x\n",
hr);
pFoundDevices = NULL;
}
SysFreeString(bstrTypeURI);
}
else
{
fwprintf(stderr, L"FindMediaPlayerDevices(): "
L"Could not allocate BSTR for type URI\n");
}
return pFoundDevices;
}