Windows Mobile程式中如果要使用http或socket連接配接伺服器,需要先連接配接網絡。可以使用ConnMgrEstablishConnectionSync函數來連接配接。
如果知道一個接入點的名稱,則可以通過ConnMgrEnumDestinations得到相應接入點的guidDestNet。然後可以使用底層的INET接口連接配接HTTP了。這其中有個問題:代理伺服器。移動的CMNET不需要代理,CMWAP則需要。接入點中可能含有代理伺服器資訊,而且接入類型包括HTTP、WAP、安全WAP、Socks等等,每一種都可能需要不同的代理。ConnMgrEnumDestinations函數無法得到這麼多的資訊。
微軟提供了一個函數來得到代理的資訊:ConnMgrProviderMessage,但是這個函數從來沒有成功過。
以下有兩種方法解決:
1、 查找系統資料庫取得代理資訊:
在HKEY_LOCAL_MACHINE/Comm/ConnMgr項下,有詳細的接入點的資訊。Destinations子項下列出了手機所有的接入點,相應的鍵值有DestId這一項。與ConnMgr平級的Providers項,也有很多資訊,其中一子項{EF097F4C-DC4B-4c98-8FF6-AEF805DC0E8E},該項有很多子項,我們周遊每一項,直到找到一個鍵值SrcId與我們上面說的DestId相等。看到了吧,與SrcId平級的鍵值有很多,不過我們目前需要的就那麼兩項,Type和Proxy。Type就是上面說的接入類型(HTTP、WAP、安全WAP、Socks等),而Proxy正是我們需要的一串代理的字元串。
以上是Windows Mobile5.0的結果。
2:通過wm5.0新提供的DMProcessConfigXML函數查詢系統的代理設定:
LPCTSTR szFormat =
TEXT("<wap-provisioningdoc>")
TEXT(" <characteristic type=/"CM_ProxyEntries/">")
TEXT(" <characteristic type=/"%s/">")
TEXT(" <parm-query name=/"Proxy/"/>")
TEXT(" <parm-query name=/"Type/"/>")
TEXT(" </characteristic>")
TEXT(" </characteristic>")
TEXT("</wap-provisioningdoc>");
LPTSTR szOutput = NULL;
LPTSTR szInput = new TCHAR[_tcslen(szFormat) + _tcslen(szEntryName) + 10];
_stprintf(szInput, szFormat, szEntryName);
DMProcessConfigXML(szInput, CFGFLAG_PROCESS, &szOutput);
其中szEntryName的格式是,網絡類型-{guid},比如HTTP-{ADB0B001-10B5-3F39-27C6-9742E785FCD4},其中的guid是特定連接配接點的guid,可以通過ConnMgrEnumDestinations得到。調用這個函數後會在szOutput參數傳回需要的值,解析他就可以得到代理的資訊了,在判斷得到的Type值是否是需要的代理類型,0-空代理,1-http代理,2-wap代理,4-socks4代理,5-socks5代理