一、前语
在前篇《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 Files\Windows CE Tools\wce420\POCKET PC 2003\Include\Armv4”目录下检查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_MACHINE\Comm\ConnMgr],如下图所示:
在Destinations一项中就对应咱们一切可用的网络衔接,这个跟用ConnMgrEnumDestinations()办法得到的是相同的作用,在默许Internet设置中咱们将看到CMNET的GUID,如下所示:
在这儿里边有DestId一项,就对应着咱们久别的GUID
e) ConnMgrReleaseConnection函数
咱们在上一步中树立衔接后咱们将得到一个衔接句柄,在重新开始一个新的衔接或许断开衔接都要调用此函数来开释掉之前创立的衔接,它的原型为: