转载:ppc网络接连方法

原文地址:http://blog.csdn.net/li_guotao/archive/2008/09/09/2902197.aspx Windows Mobile程序中如果要使用http或socket连接服务器,需要先连接网络。可以使用ConnMgrEstablishConnectionSync函数来连接。 DWORD dwStatus = 0; HANDLE hConnection = NULL; CONNMGR_CONNECTIONINFO sConInfo; memset(&sConInfo, 0 ,sizeof(CONNMGR_CONNECTIONINFO)); sConInfo.cbSize = sizeof(CONNMGR_CONNECTIONINFO); sConInfo.dwParams = CONNMGR_PARAM_GUIDDESTNET; sConInfo.dwPriority = CONNMGR_PRIORITY_USERINTERACTIVE; sConInfo.dwFlags = CONNMGR_FLAG_PROXY_HTTP |CONNMGR_FLAG_PROXY_WAP |CONNMGR_FLAG_PROXY_SOCKS4 |CONNMGR_FLAG_PROXY_SOCKS5; sConInfo.bExclusive = FALSE; sConInfo.bDisabled = FALSE; sConInfo.guidDestNet = IID_DestNetWAP; ConnMgrEstablishConnectionSync(&sConInfo, &hConnection, 15000, &dwStatus); 如果知道一个接入点的名称,则可以通过ConnMgrEnumDestinations得到相应接入点的guidDestNet。然后可以使用底层的INET接口连接HTTP了。完了吗?没有。还有个问题:代理服务器。我们都知道,移动的CMNET不需要代理,CMWAP则需要。接入点中可能含有代理服务器信息,而且接入类型包括HTTP、WAP、安全WAP、Socks等等,每一种都可能需要不同的代理。不要奢望ConnMgrEnumDestinations函数可以得到这么多的东东。 事实上,微软是提供了一个函数的,这就是传说中的ConnMgrProviderMessage。 我们来看看手机的注册表。在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的结果。在Pocket PC2003和Smartphone2003中,HKEY_LOCAL_MACHINE/Comm/ConnMgr对应为HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/ConnMgr。 通过connection manager 实现 用这个函数ConnMgrEstablishConnectionSync可以建立gprs连接。 用ConnMgrReleaseConnection函数可以断开连接。 ConnMgrEstablishConnectionSync就算联上ActiveSync调用也会返回成功。 BOOL BuildConnection(HANDLE *hConnect) { CONNMGR_CONNECTIONINFO ConnInfo = { 0 }; ConnInfo.cbSize = sizeof(ConnInfo); ConnInfo.dwParams = CONNMGR_PARAM_GUIDDESTNET; ConnInfo.dwPriority = CONNMGR_PRIORITY_USERINTERACTIVE; { GUID IID_DestNetInternet = {0x436ef144, 0xb4fb, 0x4863, 0xa0, 0x41, 0x8f, 0x90, 0x5a, 0x62, 0xc5, 0x72}; ConnInfo.guidDestNet = IID_DestNetInternet; } DWORD dwStatus = 0; return ConnMgrEstablishConnectionSync(&ConnInfo, hConnect, 15000, &dwStatus) == S_OK; } mobile连接GPRS主要使用的是ConnMgrEstablishConnectionSync这个函数,它的具体描述可以参看msdn。代码如下: BOOL ConnectGPRS(void) { DWORD dwStatus = 0; HANDLE hConnection; CONNMGR_CONNECTIONINFO sConInfo; memset(&sConInfo, 0 ,sizeof(CONNMGR_CONNECTIONINFO)); sConInfo.cbSize = sizeof(CONNMGR_CONNECTIONINFO); sConInfo.dwParams = CONNMGR_PARAM_GUIDDESTNET; sConInfo.dwPriority = CONNMGR_PRIORITY_USERINTERACTIVE; sConInfo.dwFlags = CONNMGR_FLAG_PROXY_HTTP|CONNMGR_FLAG_PROXY_WAP|CONNMGR_FLAG_PROXY_SOCKS4|CONNMGR_FLAG_PROXY_SOCKS5; sConInfo.bExclusive = FALSE; sConInfo.bDisabled = FALSE; sConInfo.guidDestNet = IID_DestNetInternet; if(ConnMgrEstablishConnectionSync(&sConInfo, &hConnection, 10000, &dwStatus) != S_OK) { return TRUE; } return FALSE; } 在这里需要说明的是需要包含 #i nclude #i nclude 这两个头文件

你可能感兴趣的:(杂七杂六,网络,wap,mobile,服务器,manager,socket)