GPRS連接(轉)

Windows Mobile平臺與Windows平臺的一個不同是手機沒錢燒,不能老用GPRS把網連着。於是就給IT民工來了個小麻煩:使用socket編程或者 http編程時,不能像電腦上想連就連,即使你通過中國移動那個周扒皮開通了GPRS套餐也不行,還得先進行GRPS的連接。

       網上找資料:http://www.cnblogs.com/jsjkandy/archive/2008/08/06/1262445.html

       使用之後將代碼整合進程序了,可用,現總結一下,以備忘。
       1,通過ConnMgrApiReadyEvent函數獲得連接管理器是否可用的事件句柄,然後用WaitForSingleObject來等待,如果等待成功,則說明連接管理器可用,可以進行下一步操作。
       2,通過ConnMgrConnectionStatus來查看連接是否已經建立。
       3,通過ConnMgrEnumDestinations來根據索引號枚舉到連接信息。
       4,如果鏈接沒有建立或者已經斷開了,根據3中獲得的連接信息,可以用ConnMgrEstablishConnectionSync或者ConnMgrEstablishConnection來建立連接。
       5,通過ConnMgrReleaseConnection釋放連接。

       通過上面5步,可以很好的枚舉並建立連接,但是存在一個實際的問題:其實在大多數時候我只需要一個函數來獲得當前最好的連接,並建立,就OK了,我才懶得管你有多少連接呢。

        幸好,偉大的微軟爲我們提供了這個函數:ConnMgrMapURL。通過這個函數,傳入一個URL,可以獲得最優連接的索引,然後就可以建立連接了。

2009-06-17補記:
       一共有IID_DestNetInternet、IID_DestNetCorp、IID_DestNetWAP、 IID_DestNetSecureWAP四個網絡單元的GUID。WM中有個meta-network的概念,GUID對應一個meta- network.從字面上理解就是"元網",即可以理解成WM對網絡操作的網絡單位的最小單元.每個元網提供了一類的網絡連接類型,WM上默認使用4個元網,即internet連接型,WAP型,單位型,安全型(忘記了,不十分確認名字叫法了),每個元網下可以配置多個APN連接,其中cmnet是屬於 APN=cmnet的internt型連接,而cmwap是屬於APN=cmwap的WAP連接.目前連接管理器的設計是面向目標網絡的,即面向各個不同的meta-network,而不是面向APN的.用戶也可以自己添加進自己定製的元網,用來管理自己想操作的一類APN連接類型和操作.
       所以函數ConnMgrMapURL就是找出最好用的meta-network對應的GUID給用戶使用. 另,WAP型的連接需要通過WAP代理,而區別與internet直連,所以設置cmwap時需要指定代理服務器的IP地址才能連接出去.而WM中代理 (proxy)的意思其實也是連接了兩個不同的meta-network網絡,告訴連接管理器,通過WAP型元網轉代理也能連接到internet網.
       發現,ConnMgrMapURL在模擬器上並不能準確枚舉出正確的網絡連接,我猜想是因爲模擬器是沒有其他連接的,只能通過 IID_DestNetInternet來獲取網絡連接,但是模擬器的ConnMgrMapURL做得有bug,他以爲他很牛B呢,能給出其他連接,所以,在模擬器上使用ConnMgrMapURL函數時,很容易獲得錯誤的網絡連接,使用這個錯誤的連接會返回錯誤號:CONNMGR_STATUS_NOPATHTODESTINATION。正確的做法是,首先通過ConnMgrMapURL得到的GUID進行連接,如果不行,再通過IID_DestNetInternet進行連接。

 

7月15日補記:
        Copy網上的代碼,發現是有bug的,究其原因,是ConnMgrMapURL函數給出了錯誤的索引值,ConnMgrMapURL函數有兩個返回值,一個是連接點的索引值,一個是連接點的GUID值,在大部分手機上,可以通過ConnMgrMapURL得到最優連接點的索引值,然後通過該索引值枚舉到連接點的信息。但是測試中發現有少部分手機,ConnMgrMapURL返回的索引值是錯誤的,但返回的GUID值卻是正確的。將程序改爲只通過GUID 來連接連接點時,程序的bug消失。
        其實ConnMgrMapURL函數返回的,就是用戶在系統中設置的連接點,只不過我懷疑當用戶當前的連接點不能連接時,系統會去查找歷史的鏈接歷史,從中返回一個與URL匹配的連接點進行嘗試。用戶設置連接的方法如下:設置-連接項-連接-高級-選擇網絡-網絡管理。
        系統的所有連接點,都存放在wince系統的註冊表中,wince的註冊表可以通過SDK中的工具CE Remote Tools\5.01\bin\ccregedt.exe來查看,路徑是[HKEY_LOCAL_MACHINE\Comm\ConnMgr]。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章