新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > GPRS開發系列文章之進階篇

        GPRS開發系列文章之進階篇

        作者: 時間:2016-10-08 來源:網絡 收藏

        一、前言

        本文引用地址:http://www.104case.com/article/201610/305853.htm

        在前篇《GPRS開發系列文章之入門篇》里,我主要對GPRS開發中遇到的一些常用概念和一些業務邏輯做了簡單的介紹,沒想到得到了很多網友的支持和關注,因昨天有事因此延遲到今天才奉上這篇進階系列文章,還請各位見諒。希望大家支持同時歡迎拍磚,共同提高。

        在最后一篇《GPRS開發系列文章之實戰篇》我將詳細敘述如何利用類庫開發Client和Server端通信程序,因此本文的多數講解將是為下文服務的。本文將向您介紹基于PPC2003的Windows mobile 系列的客戶端和基于.Net 2005的服務器端進行開發所需掌握和了解的開發庫,并著重圍繞客戶端進行GPRS連接所用到的一些API函數進行講解。本文的最后是一些用于引用和學習用的鏈接和利用API建立GPRS連接的demo,感興趣的同志可以去點擊或下載后進行深入研究。

        關于客戶端API的敘述我基本上都是翻譯過來的,如欠妥還請各位多多斧正!同時demo程序我也是只做了部分加工,主要都是參照了謝紅偉的發表的文章(后面有引用鏈接)

        二、進階系列篇詳解

        1. 客戶端建立GPRS連接 API

        客戶端開發采用 EVC4.0進行開發,主要講解的類庫為Connection Manager 系列API,客戶端在進行GPRS撥號連接時將使用下文所介紹的API。

        Connection Manager(本人譯為 連接管理器,此對象為一系列API的集合) 系列API的主要目的是為了集中管理基于Windows Mobile系列的設備網絡連接的建立與維護。移動應用程序使用 連接管理器API去建立或規劃一個網絡連接,而連接管理器則掌控連接過程中的所有狀態信息.應用程序在要發起一個連接(比如Internet),只要簡單的告知連接管理器就OK了。

        當一個應用程序發起一個網絡連接的請求時,連接管理器首先從連接服務提供商(CSPS)處獲取所有可能的連接信息,然后連接管理器會從這一系列連接信息中根據開銷,延遲、帶寬等因素來選擇一個最佳的連接,最后連接管理器將被請求的連接排入隊列,然后在一個適合的時間使用CSPS來建立連接。

        【API函數】:

        a) ConnMgrApiReadyEvent()函數

        函數原型:HANDLE WINAPI ConnMgrApiReadyEvent();

        利用此函數來我們可以返回一個連接事件的句柄 ,注意在的得到句柄后要記得及時釋放

        b) ConnMgrConnectionStatus()函數

        函數原型:

        HRESULT WINAPI ConnMgrConnectionStatus(HANDLE hConnection,DWORD * pdwStatus );利用此函數的返回值pdwStatus,我們可以得到很多的關于連接的信息,例如如果我們連接成功將返回CONNMGR_STATUS_CONNECTED,斷開連接將返回CONNMGR_STATUS_DISCONNECTED,他的返回狀態信息非常豐富,有14中之多,完全可以滿足我們的應用需要;

        c) ConnMgrEnumDestinations()函數

        函數原型:

        HRESULT WINAPI ConnMgrEnumDestinations(int nIndex,CONNMGR_DESTINATION_INFO * pDestInfo );

        一般我們的PDA在連接GPRS時都有好幾個連接,利用此函數我們可以枚舉出所有可用的連接,然后再對挑選的連接進行篩選得到一個最佳連接

        接下來講兩個很重要的函數,我們將利用兩個函數中的一個來發起連接,他們是:

        d) ConnMgrEstablishConnection()和ConnMgrEstablishConnectionSync()函數,這兩個函數一個用于發起一個異步連接請求,一個用于同步請求,使用異步連接請求我們可以在發起連接后立即返回,而使用同步請求客戶端將一直被阻塞知道函數返回確認連接,關于異步和同步我就不再敘述;

        它們的原型依次為:

        HRESULT WINAPI ConnMgrEstablishConnection( CONNMGR_CONNECTIONINFO * pConnInfo, HANDLE * phConnection );

        HRESULT WINAPI ConnMgrEstablishConnectionSync( CONNMGR_CONNECTIONINFO * pConnInfo, HANDLE * phConnection, DWORD dwTimeout, DWORD * pdwStatus );

        可以看到兩個函數的第一個參數都為一個CONNMGR_CONNECTIONINFO對象,此對象為一個結構體,它保存了客戶端發起連接請求的一系列信息,因此,在我們調用此函數時必須構造一個該對象,然后將其作為參數傳入連接函數中。這里很有必要講一下該結構體,該結構體的原型如下:

        typedef struct _CONNMGR_CONNECTIONINFO

        {

        DWORD cbSize; DWORD dwParams;DWORD dwFlags;

        DWORD dwPriority;BOOL bExclusive;BOOL bDisabled;GUID guidDestNet;

        HWND hWnd; UINT uMsg; LPARAM lParam;ULONG ulMaxCost; ULONG ulMinRcvBw;

        ULONG ulMaxConnLatency;

        } CONNMGR_CONNECTIONINFO;

        其中參數dwFlags用于指定我們的接入點,比如我們常說的CMNER和CMWAP,而參數GUID則標志了我們對應于每個接入點的全球唯一標志符,關于如何得到或者查看GUID,我們可以在“Program FilesWindows CE Toolswce420POCKET PC 2003IncludeArmv4”目錄下查看connmgr.h文件,里面包含了各個接入點的GUID,例如:

        CMNET 為:(0x436ef144, 0xb4fb, 0x4863, 0xa0, 0x41, 0x8f, 0x90, 0x5a, 0x62, 0xc5, 0x72)

        CMWAP為:0x7022e968, 0x5a97, 0x4051, 0xbc, 0x1c, 0xc5, 0x78, 0xe2, 0xfb, 0xa5, 0xd9

        如果想更進一步了解,我們還可以通過查看注冊表方式來查看PDA上連接管理器的相關連接信息,在PPC 2003中注冊表路徑為:

        [HKEY_LOCAL_MACHINECommConnMgr],如下圖所示:

        在Destinations一項中就對應我們所有可用的網絡連接,這個跟用ConnMgrEnumDestinations()方法得到的是一樣的效果,在默認Internet設置中我們將看到CMNET的GUID,如下所示:

        在這里里面有DestId一項,就對應著我們久違的GUID

        e) ConnMgrReleaseConnection函數

        我們在上一步中建立連接后我們將得到一個連接句柄,在重新開始一個新的連接或者斷開連接都要調用此函數來釋放掉之前創建的連接,它的原型為:


        上一頁 1 2 3 下一頁

        關鍵詞:

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 民乐县| 高青县| 平谷区| 万安县| 安化县| 大同市| 丰顺县| 城步| 太保市| 安远县| 鄢陵县| 确山县| 简阳市| 县级市| 涿州市| 东城区| 白山市| 高淳县| 关岭| 汉阴县| 施甸县| 洛阳市| 苏尼特右旗| 汪清县| 吉木乃县| 壤塘县| 奈曼旗| 秦皇岛市| 会宁县| 永修县| 墨竹工卡县| 连平县| 龙胜| 宁海县| 贺州市| 镇远县| 马边| 平定县| 藁城市| 怀安县| 梨树县|