天天看點

Window Mobile通過cmwap連接配接網絡

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代理

上一篇: 關于Nas存儲
下一篇: 關于json

繼續閱讀