cdma拨号

电信cdma卡自动拨号
默认帐号与密码均为card
使用的接入点的名称设定为GPRS
evc4.0/wince5.0升级版

法一:使用cdma模块厂家提供的at使用说明,用at指令完成ppp拨号。
以华为的em200为例:
// 先询问一下当前网络的状态(这不是必须的也不是最重要的)
at+cpin?
     /// 回应:
     +CPIN:READY
     OK
at+csq?
    /// 回应:
    +CSQ:22,99 // 值是不定的
    OK

// 现开始建立PPP连接(这里是最重要的,也是必须的)
at%accnt=card,card
    // 回应:
    OK

at%pppopen
    // 回应
     %CORG:#777,1
     %CCNT:1
     %PPPOPEN:0 // 0表示成功,1表示失败
     %PPPSTATUS:0 // 0表示连接上,1表示断开
     OK

// 无线上网很可能中途断开的,所以很可能需要查询连接状态以采取行动
// 查询ppp拨号连接状态
at%pppstatus
    // 回应:
   %PPPSTATUS:0 // 0表示连接,1表示断开
   OK


法二:使用ras函数来完成拨号。
注:以下代码思路有一个问题:如果检测到网络已经连接上了,而我又想把它断开,如何做到?因为连接不是程序创建的,所以

不知道它的句柄,所以这里的程序也没法把它hung up。如果连接是程序建立的,那自然可以断掉。

/// 说明:代码抄袭于网上
// 连接
#define MAX_NUM_RAS 20
BOOL RasConnect()
{
LPRASENTRYNAME lprasentryname;
DWORD cb, cEntries, nRet, i;
BOOL bPassword;
RASDIALPARAMS RasDialParams;
RASPPPIP rip;

lprasentryname = (LPRASENTRYNAME)LocalAlloc(LPTR, sizeof(RASENTRYNAME) * MAX_NUM_RAS);
if( !lprasentryname )
{
DETRACE("内存不足");

return FALSE;
}

lprasentryname[0].dwSize = sizeof(RASENTRYNAME);
cb = sizeof (RASENTRYNAME) * MAX_NUM_RAS;

// 枚举连接入口
nRet = RasEnumEntries(NULL, NULL, lprasentryname, &cb, &cEntries);
if (nRet)
{
if(nRet == ERROR_BUFFER_TOO_SMALL)
{ // 申请的空间小于实际需要的空间
LocalFree(lprasentryname);
lprasentryname = (LPRASENTRYNAME)LocalAlloc(LPTR, cb); //重新申请空间

if( !lprasentryname )
{
DETRACE("内存空间不足");

return FALSE;
}

lprasentryname->dwSize = sizeof(RASENTRYNAME); //只设置首个结构的字节大小

// 重新枚举
nRet = RasEnumEntries(NULL, NULL, lprasentryname, &cb, &cEntries);
if (nRet)
{
DETRACE("重新枚举接入点失败");

LocalFree(lprasentryname);

return FALSE;
}
}
else
{
DETRACE("枚举接入点失败");

LocalFree(lprasentryname);

return FALSE;
}

}

for(i = 0; i < cEntries; i ++)
{
if( !wcscmp(lprasentryname[i].szEntryName, _T("GPRS")) ) //寻找GPRS作为拨号连接
{
// 初始化RasDialParams
ZeroMemory(&RasDialParams, sizeof(RasDialParams));
RasDialParams.dwSize = sizeof(RasDialParams);

// 取得接入点(GPRS)的资料
_tcscpy(RasDialParams.szEntryName, lprasentryname[i].szEntryName);
nRet = RasGetEntryDialParams(NULL, &RasDialParams, &bPassword);

if( nRet )
{
DETRACE("获取接入点参数失败");

LocalFree(lprasentryname);

return FALSE;
}

_tcscpy(RasDialParams.szUserName, _T("card")); //默认的cdma拨号用户名
_tcscpy(RasDialParams.szPassword, _T("card")); //默认的cdma拨号密码

//建立客户端到服务器的Ras连接
nRet = RasDial(NULL, NULL, &RasDialParams, 0, NULL, &m_hRasConn);
if( nRet )
{
DETRACE("拨号失败");

m_hRasConn = NULL;

LocalFree(lprasentryname);

return FALSE;
}
}
}

LocalFree(lprasentryname);

return TRUE;
}
以上连接大概思路是:枚举出所有已经手工(或厂家程序)创建的接入点,然后找GPRS这一特定的接入点作为连接,取出它的信

息,用rasdial来拨号。(如果只为找GPRS接入点,显然上面的代码是可以优化的)

// 断网
BOOL RasDisConnect()
{
DWORD dwRet;
if(m_hRasConn)
{
dwRet= RasHangUp(m_hRasConn);

DETRACE("已经断网");

m_hRasConn = NULL;
}

return TRUE;
}
以上显然要知道m_hRasConn才可以断网,如果你不知道呢?

// 检测网络状态
// 0 -- 连接上
// 1 -- 断开
int ConnectStatus()
{
RASCONNSTATUS * lpRasConnStatus = (RASCONNSTATUS *)GlobalAlloc(GPTR, sizeof(RASCONNSTATUS));
if (lpRasConnStatus)
{
lpRasConnStatus->dwSize = sizeof(RASCONNSTATUS);
RasGetConnectStatus(g_snMain.m_hRasConn, lpRasConnStatus);
int ret = (lpRasConnStatus->rasconnstate == RASCS_Connected ? 0 : 1 );
return ret;
}
else
{
DETRACE("内存空间不足");
return -1;
}
GlobalFree(lpRasConnStatus);
}

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值