在國際上,通常只有一種GPRS接入方式,在中國有CMWAP和CMNET兩個接入點,前者是為手機WAP上網(wǎng)而設(shè)立的,后者則主要是為PC、筆記本電腦、PDA等利用GPRS上網(wǎng)服務(wù)。它們在實現(xiàn)方式上并沒有任何差別,但因為定位不同,所以和CMNET相比,CMWAP便有了部分限制,資費上也存在差別。
下面這段代碼連接CMNET.
//連接GPRS
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_DestNetInternet; //IID_DestNetWAP
sConInfo.hWnd = 0;
sConInfo.uMsg = 0;
if (FAILED(ConnMgrEstablishConnectionSync(&sConInfo, &hConnection, 60000, &dwStatus))) ;
目前,移動的WAP網(wǎng)關(guān)對外只提供HTTP代理協(xié)議(80和8080端口)和WAP網(wǎng)關(guān)協(xié)議(9201端口),彩信還有單獨配置接入點是因為彩信服務(wù)需要連接專用的服務(wù)器。所以把上面那段代碼中的IID_DestNetInternet換成IID_DestNetWAP,實際中是不能連通GPRS的。
if (m_hConnection)
{
ConnMgrReleaseConnection(m_hConnection, FALSE);
m_hConnection = NULL;
}
CStringArray StrAry;
CONNMGR_DESTINATION_INFO networkDestInfo = {0};
// 得到網(wǎng)絡(luò)列表
for ( DWORD dwEnumIndex=0; ; dwEnumIndex++ )
{
memset ( &networkDestInfo, 0, sizeof(CONNMGR_DESTINATION_INFO) );
if ( ConnMgrEnumDestinations ( dwEnumIndex, &networkDestInfo ) == E_FAIL )
{
break;
}
StrAry.Add ( networkDestInfo.szDescription );
}
int Index =0;
//查找“WAP”的索引
for (int i = 0; i < StrAry.GetCount(); ++i)
{
if (StrAry[i] == L"WAP")
{
Index = i;
break;
}
}
// 得到正確的連接信息
CONNMGR_DESTINATION_INFO DestInfo = {0};
HRESULT hResult = ConnMgrEnumDestinations(Index, &DestInfo);
BOOL bRet = FALSE;
if(SUCCEEDED(hResult))
{
// 初始化連接結(jié)構(gòu)
CONNMGR_CONNECTIONINFO ConnInfo;
ZeroMemory(&ConnInfo, sizeof(ConnInfo));
ConnInfo.cbSize = sizeof(ConnInfo);
ConnInfo.dwParams = CONNMGR_PARAM_GUIDDESTNET;
ConnInfo.dwFlags = CONNMGR_FLAG_PROXY_HTTP | CONNMGR_FLAG_PROXY_WAP | CONNMGR_FLAG_PROXY_SOCKS4 | CONNMGR_FLAG_PROXY_SOCKS5;
ConnInfo.dwPriority = CONNMGR_PRIORITY_HIPRIBKGND;//CONNMGR_PRIORITY_USERINTERACTIVE;
ConnInfo.guidDestNet = DestInfo.guid;
ConnInfo.bExclusive = FALSE;
ConnInfo.bDisabled = FALSE;
DWORD dwStatus = 0;
hResult = ConnMgrEstablishConnectionSync(&ConnInfo, &m_hConnection, 100*1000, &dwStatus );
// if(FAILED(hResult))
// {
// MessageBox(NULL,L"連接失敗",L"錯誤信息",MB_OK);
// m_hConnection = NULL;
// }
// else
// {
// MessageBox(NULL,L"連接成功",L"錯誤信息",MB_OK);
// return TRUE;
// }
}
上面兩段代碼僅限于連接移動的GPRS。注意:m_hConnection最好設(shè)成全局變量,這樣程序退出時關(guān)閉GPRS
所需的頭文件和lib庫
#include <connmgr.h>
#include <connmgr_proxy.h>
#pragma comment( lib, "cellcore.lib" )