基于VC 的3G无线上网卡主功能设计与实现

电脑编程技巧与维护

WindowsXP,WindowsVista。

图1华为E1750型3G上网卡

在程序开发中,都将采用该款3G无线上网卡。对于不同标准的3G无线上网卡,短信收发与3G标准无关,因而程序是可以通用的。但是RAS拨号程序涉及拨号参数的设置,对于不同标准的3G无线上网卡,其拨号参数是不同的,因而在程序开发中需对不同的上网卡设置不同的参数。

2RAS拨号上网

2.1概述

远程访问服务(RemoteAccessService)利用公共交换电话网络(PSTN)把远离局域网(LAN)的计算机连接到局域网上来,远程计算机(RAS客户机)可以获得LAN用户的所有服务和权限,并访问、共享该I,AN卜的资源。远程访问服务器提供r拨号网络(DUN)连接与虚拟专用网络(VPN)连接两种不同的远程访问连接方式。对于文中的3G无线上网卡,通过RAS拨号连接到通信运营商服务器,从而接入Internet网络。

2.2RAS拨号程序设计

RAS拨号上网一般步骤为,首先使用创建连接向导创建一个网络连接,然后通过标准的拨号窗口进行拨号,连接网络。文中设计的拨号软件也是通过这个过程实现的,程序的主流程图如图2所示。

读取已存拨号

参数并设置

选择拨号Modem

创建拨号入口

I.卜—一

断开网络

保存拨号信息J

图2RAS拨号主流程图

实现流程图中这些操作的具体函数部分如下:一14一

FillModemCombo(查找拨号设备并显示)、CreateDialUpEntry(创建连接人口)、DialUpNetwork(拨号)、HangUpConnection(断开连接)和SaveRasMessage(保存拨号信息)。

2.2.1检测拨号设备

连接入口创建之前,首先需要检查拨号modem是否已经连接在计算机上,可调用FillModemCombo函数,它封装了与枚举设备相关的RASAPI。FiUModemCombo首先调用函数RasEnumDevices获得连上计算机的RAS的设备信息,调用成功后,RAS设备的信息就会存储到RASDEVINFO结构体数组中。获得设备信息之后要判断设备类型,并保存设备名,然后在对话框的ComboBox控件中显示出来。RAS支持的设备类型有:modem、ISDN设备、红外线设备或ADSL设备等。文中3G无线上网卡是作为一个调制解调器连接计算机。

2.2.2创建连接入口

接下来为获得的特定设备创建拨号入口,然后设置人口的各个参数。文中通过CreateDiMUpEntry函数实现了这个功能。它首先调用RasValidateEntryName创建一个拨号入口。它有两个参数,第一个参数是电话本的名称,拨号所需的电话号码会存储在这个电话本中,如果为空将使用系统自带的电话本文件;第二个参数是拨号入口名。

创建拨号入口之后要对拨号入几的属性进行设置,微软提供了RASENTRY结构体来保存拨号入口的属性信息。RASENTRY结构体比较复杂,针对不同的操作系统RASENTRY结构体的设置也有所不同。RASENTRY结构体的主要成员如下:

dwfNetProtocols:拨号入口网络层使用的协议,在这里选择口协议,参数设置为RASNP_Ip;

dwFramingProtocol:拨号入口数据链路层使用的协议,这个协议要求无线模块、计算机和连接的移动运营商的服务器同时支持。WCDMA标准支持使用最为广泛的PPP协议,因此将参数设置为RASFPPpp;

dwType:拨号入口的类型,选择RASET—Phone,它用于modem、ISDN等依赖电话线作为传输介质的连接;

RASENTRY结构体的其他参数不做具体介绍,详细情况可以参见相关文献。

设置RASENTRY结构体后,通过RasSetEntryProperties函数设置拨号人口的属性:

RasSetEnqrProperties(NULL,lpszEntry,&rasEntry,sizeof(rasEntry),NULL,0)

其中,第二个参数是拨号入口名的指针,在本程序中设置的名称为“MyNetwork”,第三个参数是刚才设置的RASENTRY结构体的指针。

2.2.3RAS拨号

拨号入口创建之后,点击“拨号”按钮,用户就可以进行拨号了。用户在第一次拨号的时候会创建拨号连接,在

“MyNetwork”连接创建以后,程序会直接进行拨号。但如果系统中已经有了一个拨号连接,这时再打开其他拨号程序就

会造成冲突。所以,在拨号之前应该先查找活动的RAS连接,

SOFrWAREDEVELOPMENTANDDESICN软件开发与设计

如果存在相应得活动连接,程序会直接退出;如果不存在连接,就调用拨号程序DialUpNetwork。

在进行拨号之前需要设置RASDIAIPARAMS结构体,这个结构体包含要进行拨号连接所需要得参数,包括拨号人口、电话、用户名、密码和域等。设置完成后,使用微软提供的RasDial函数进行拨号:

dwError=RasDial(NULL,NULL,&dialParams,1,rasCallbackfuc,&m_ConnectionHandle)

函数的l{{『两个参数都设置为NULL;第三个参数是刚才设置的拨号参数结构体的指针;第四个参数设置为1,表示它是一个异步拨号过程,每当状态发生变化,系统会凋用回调函数rasCallbaekfue,程序员通过编程使回调函数完成不同的功能。文中的回调函数会实时读取拨号状态信息,并在“拨号状态”窗口中显示出来,用户可用根据该信息判断当前状态并进行调试。

2.2.4断开RAS连接、保存拨号信息

拨号程序在拨号成功之后会保存拨号连接的句柄,需要断开连接时,程序会调用HangupConnection甬数,通过这个句柄来断开拨号连接。但是,用户有可能在创建了连接之后关闭了应用程序,当要断开的时候又打开程序进行断开操作,这个时候由于已经存在连接,应用程序不可能通过DialUp函数获得连接句柄.因此,在断开连接之前需要判断连接甸柄是否为NULL,如果为NULL,需要调用FindConnection函数获得拨号连接句柄。然后,HangUpConnection会调用微软提供的RasHangUp函数断开连接。

在退出程序之前可以使用SaveRasMessage函数保存拨号信息,如用户名、密码和拨号号码等,到dial.ini文件中可以方便再次调用程序时参数的设置。

2.3实验测试

在具体实现该程序时,3G无线上网卡采用的是E1750,通过前面介绍,该modem是采用wcdma标准的3G上网卡,故需要插入联通的usim卡进行拨号。程序启动后,首先设置各种参数。输入拨号号码“?9嘶”,用户名和密码均为空,在“选择拨号modem”下拉框中可以看到两个拨号modem,选择“HUAWEIMobileConnect一3GModem铊”(另一个modem为计算机自带的拨号modem)。设置完毕后,点击“拨号”按钮,等待一段时间,就可以接人Intemet网络,如图3所示。

图3RAS拨号上网3短消息收发

3.1基本概念

短消息服务(ShortMessageService,SMS)就是通过移动网络提供的传输有限长度的文本数字或文字信息的服务。这种信息的传输是在手机之间或手机与其他短消息实体(ShortMessageEntity)之间通过业务中心进行文字信息收发实现的,其中业务中心是独立于移动网络的一个业务处理系统,主要功能是提交、存储、转发短消息,并完成与Intemet等网络的互通,以实现来自其他SME的短消息的传递。

在讨论之初,要对由欧洲电信标准协会(ETSI)制订的SMS规范有所了解。与短消息收发有关的规范主要包括GSM03.38、GSM03.40和GSM07.05。前2者着重描述SMS的技术实现(含编码方式),后者则规定了SMS的DTE—DCE接口标准(AT命令集)。

3.2PDU编码规则

一共有3种方式来发送和接收SMS信息:BlockMode、PDUMode和TextMode。其中PDUMode被所有手机支持,可以使用任何字符集,也是手机默认的编码方式。下面介绍的内容,是在PDUMode下发送和接收短消息的实现方法。

PDU串是一串ASCII码,由’勺”一719“、’,A"-"17”这些数字和字母组成。它们是8位字节的十六进制数,或者BCD码十迸制数。PDU串不仅包含可显示的消息本身,还包含很多其他信息,如SMS服务中心号码、目标号码、回复号码、编码方式和服务时间等。其定义在很多文献中有详细的介绍,在本文中不再赘述。需要注意的是号码和时间的表示方法,不是按正常顺序来的,而且要以‘F“将奇数补成偶数,然后相邻奇偶位交换位置。

在PDUMode中,可以采用3种编码方式来对发送的内容进行编码,它们是7-bit、8-bit和UCS2编码。UCS2编码用于发送Unicode字符,它固定使用16位(两个字节)来表示一个字符,共可以表示65536个字符,适合发送中文。这里将使用UCS2编码。

3.3基于串口通信的短消息技术

3.3.1RS一232C串行通信接口技术

RS一232C是美国电子丁业协会(EIA)公布的在异步串行通信中应用最为广泛的标准总线,适合短距离或带调制解调器的通信场合。由于通信设备厂商都生产与RS一232C制式兼容的通信设备。因此,只要手机等通信设备支持RS一232C标准,就可以将它们和微机的COM口相连,从而进行串行通信。文中所使用的3G无线上网卡虽然是USB接口(UniversalSerialBus。一种新型的、基于令牌的、高速的串行接口标准),但是还是遵循基本的串口规范的,在计算机的设备管理器中可以看到新增加的通信端口,所以其编程方法和基本的串口编程是相同的。

各软件公司提供的标准串口通信软件包具有丰富的与串行通信密切相关的类库和接口,提供了对串口的各种操作,在实现串口编程时非常方便,程序员不必花时间去_r解较为复杂的API函数。选用Microsoft公司提供的Microsoft

—15一

电脑编程技巧与维护

CommunicationsControl(MSComm)控件来实现串口通信。3.3.2AT手机指令

GSMAT指令接口提供了一种移动台(MS)与数据终端设备(DTE)之间的通用接口。在MS收到网络发来的短消息时,能够通过串121发送给DTE,DTE也可以向MS发送各种命令。因此可以利用计算机通过串门直接向手机下达AT命令,来方便地实现基于串口的短消息SMS的发送、接收和管理。各个厂商的AT指令可能不尽相同,常用的AT指令有:“AT+CMGR”从手机读取一条短消息;“AT+CMGS”发送短消息;“AT+CMGD”从手机中删除一条短消息。

3.3.3程序设计

基于串口通信的短消息技术已经十分成熟,在MicrosoftVisualc++.NET2005平台下编写了程序代码。短信操作主要是通过向3G无线上网卡发送AT指令并接受回执判断操作状态。程序首先设置端口号、通信速率和SMSC号码。随后初始化COM端n,启动多线程对内部消息进行响应,向串口写、读AT指令。指令发出后,等待模块端n反馈,判断操作是否成功。下面介绍发送、接收短消息的主要函数。

定义如下参数:

intPduLength;,,PDU串长度

unsignedcharSmscLcngth;//SMSC串长度

intnLength;//串几收到的数据长度

charATcmdf16】;,,命令串

charpdu[512]://PDU串

charass【128】;//应答串

通过smsSendMessage函数进行短消息的发送,函数定义如下:

intsmsSendMessage(SM_PARAM+pSrc)

//pSrc源PDU参数指针,即为短信内容字符串

I…

PduLength=smsEncodePdu(pSrc,lxlu);

,/根据PDU参数,编码PDU串

/产命令中的长度,不包括SMSC信息长度,以数据字节计

sprinff(ATcmd,”AT+CMGS=%d、r”,PduLength,2一SmscLength)://生成命令

WritcComm(ATcmd,strlen(ATcmd));

,腧出命令串

nLength=ReadComm(ans,128);

们卖应答数据

if(nLength==4&&strncmp(arts,“、^n>”,4)=0)

,,根据能否找到”、rkn>”决定成功与否

{returnWriteComm(pdu,strlen(pdu));))

倩到肯定回答,继续输出PDU串

通过smsReadMessage函数读取短消息,函数定义如下:

intsmReadMessage(SM_PARAM‘pMsg)

{…

char*ptr;

//内部用的数据指针

pu=arts;…

spdnff(ATcmd,”AT+CMGLh"”);//生成命令

WfitcComm(ATcmd,strlen(ATcmd))∥输出命令串

nLength=ReadComm(ans,1024);,,读应答数据一16一

//根据能否找到”+CMSERROR”决定成功与否

if(nLength>0&&stmcmp(alas,”+CMSERROR”,10)!=O)

{while((ptr=strsff(ptr,”+CMGL:”))!=NULL)//循环读取每一条短消息,以”+CMGL:”开头

{叫+=6;//跳过”+CMGL:”

sscanf(ptr,”%d",&pMsg->index);,,读取序号

ptr=strstr(pⅡ,”ⅥnfI);,/找下一行

ptr+=2;//跳过”、^n”

smsDecodePdu(ptr,pMsg);//PDU串解码

…}…}

3.4实验测试

在具体实现该程序时,modem仍然采用的是E1750。该modem是USB接口,在计算机的设备管理器中可以看到新增加的通信端口COM8、COM9,测试后为COM8,COM9为modem所带闪存的端口。运行程序后,在“端r丁与SMSC设置”对话框中,端广1设置为COM8;通信速率参考在设备管理器一>通信端口(corn8)一>属性一>端口设置黾的速率设定,在此为9600;SMSC号码在长沙为+8613010731500,如图4所示。

图4短信收发”端口与SMsC设置”对话框设置完毕后,在主程序界面中输入短信内容和目的号码就可以发送短信了,如图5所示。

刁≮o

图5短信发送

当有新短消息时会在列表框里实时显示出来,如图6所

图6短信接收

4结语

针对3G无线上网卡与传统上网卡的区别,深入探讨了3G无线上网卡主要功能的程序设计与实现,并用E1750型3G上网卡进行具体验证实验。程序可移植性强。对后续的系统

(下转到36页)

相关文档
最新文档