1、第15章 VC发送手机短信,在这个信息化快速发展的社会环境下,商业竞争变得越来越激烈,越来越多的企业在开发自己的短信平台,以求得到更快捷的信息或服务。一般情况下,开发者会选择使用VC平台与短信猫进行短信平台的开发。因此,在本章中,将向读者介绍短信猫相关的基本知识及其二次开发接口等相关内容。,15.1 短信猫介绍,读者在VC平台下开发短信平台时,短信猫是必不可少的硬件设施。所以,读者必须了解短信猫是什么及其种类。当然在开发时,作为程序员而言,最关心的问题还是短信猫的生产商所提供的二次开发接口。因此,在本节中,将向读者介绍短信猫的种类以及二次开发接口等相关知识。,15.1.1 短信猫简介,短信猫(
2、GSM MODEM)是一种支持GSM无线通信的工业级调制解调器,其功能与读者日常所用的MODEM(调制解调器)的功能基本一致。一般情况下,短信猫的核心部分是基于德国西门子的GSM模块的。读者只需插入国内移动通信运营商的SIM卡后,即可接入运营商的GSM网络中。这样,读者便可以通过短信猫,实现无线GSM通话、收发短信、传输数据等功能。 如果将短信猫与手机相比较,短信猫的核心模块与手机的核心模块一样。当短信猫接通电源以后,其内置软件便开始运行工作。如果读者将某个移动运营商的SIM卡插入到短信猫中。那么,短信猫便完全和手机一样,被接入到移动通信网络中进行工作。,计算机可以通过串口或USB接口通过专用
3、的连接线连接短信猫,通过一系列的指令,实现与短信猫的数据通信。例如,收发短信、拨打电话以及收发传真等。只是在本章实例中,仅需要使用其发短信的功能即可。所以,读者若想使用其他功能只要学会相关指令即可。 短信猫与手机最大的区别,在于手机有自带的屏幕、键盘和应用软件。而短信猫则需要读者根据其二次开发接口对其进行相关的驱动和控制。当前,读者在实际开发中所使用的短信猫,其外型结构有很多种,但是其核心技术都是一样的,如图15.1所示。,图15.1 常用短信猫外型结构,注意:图15.1中所示外型结构的短信猫是基于USB接口的一款短信猫。关于短信猫接口方面的知识将在15.1.2节中介绍。,15.1.2 短信猫
4、分类,虽然短信猫的核心技术基本相同,但是根据短信猫使用的接口和短信猫中接口模块的不同,短信猫也可以分为不同的种类。如果按照短信猫使用的接口来分类,短信猫可以分为串口短信猫、USB接口短信猫等。如果按照短信猫中接口模块多少来分类,短信猫可分为单口短信猫和短信猫池两种。因此,在本节中将向读者简单介绍这几种短信猫。,1串口短信猫,串口短信猫是指该类短信猫与计算机之间的数据通信是通过串口进行传输的。其接口外型如图15.2所示。,图15.2 串口短信猫外型结构,当读者使用串口短信猫与计算机相结合,开发短消息平台时,开发人员可以通过计算机串口向短信猫发送AT指令完成数据通信等操作。,2USB接口短信猫,U
5、SB接口短信猫是指该类短信猫与计算机之间的数据通信是通过USB接口进行传输的。其接口外型如图15.1所示。 由于USB接口属于即插即用的计算机接口。所以,使用USB接口的短信猫时,其操作步骤非常简单。读者仅需要将短信猫插入计算机的USB接口即可实现数据通信。从价格上讲,USB短信猫的市场价格也比较便宜。在这里,建议读者在开发时选择USB接口的短信猫。,3单口短信猫,单口短信猫是指在短信猫中,读者只能插入一张SIM卡,进行单个通道的数据通信,如图15.3所示。如果读者希望通过不同的通道发送和接收多个数据,那么应该采用多口的短信猫进行开发。,图15.3 单口短信猫外型结构,4短信猫池,短信猫池是指
6、该类短信猫具有多个通道,可以插入多张SIM卡,并且能够同时发送和接收多个数据,如图15.4所示。,图15.4 短信猫池外型结构,如图15.4所示,短信猫池具有多个数据传输通道,可以插入多张SIM卡,并且每个通道都具有各自的数据传输天线。如果读者开发的短消息平台需要以不同的号码群发短消息,那么应该使用该类型的短信猫进行平台开发。 在本节中,主要向读者介绍了短信猫的几种类型以及外型结构。通过本节知识的学习,读者对短信猫的种类以及类型应该有一个大致的了解。,15.1.3 短信猫开发接口,短信猫开发接口(GSM MODEM SDK)是指程序员编程与短信猫进行数据通信时,短信猫的生产商为程序员提供的一系
7、列函数或者控件等。一般情况下,短信猫的生产商为程序员提供了4种开发接口模式。这4种开发接口模式分别为使用AT指令、短信猫二次开发包、短信猫通信中间件以及第三方提供的短信网关。在本节中,将向读者分别介绍这4种开发接口模式。,1使用AT指令,AT指令是指一种基于调制解调器的命令语言。一般情况下,该指令是从一个终端设备或者是数据终端设备向终端适配器、数据电路终端设备发送的指令。计算机通过向终端设备发送AT指令可以实现控制其功能的作用。例如,当读者需要获取插入短信猫中的SIM的相关信息时,便可以使用AT指令实现。其指令代码如下:AT+CCID /获取短信猫中的SIM卡相关信息在AT指令中,均以字符AT
8、作为指令开始。上面的指令AT+CCID表示读者将使用该指令获取短信猫中插入的SIM卡的标识,而这个命令将使短信猫中相应的模块读取SIM卡上的EF-CCID标识文件。 注意:在这里仅仅是为了向读者介绍AT指令的作用以及基本格式。关于该指令的详细讲解将在15.3节中向读者进行讲解。,2短信猫二次开发包,短信猫二次开发包,就是短信猫的生产商提供给上层开发人员的API函数。这些API函数封装了AT指令。 当读者需要使用短信猫中相应的功能时,只需要调用生产商所提供的短信猫二次开发包中的相关API函数等即可。虽然短信猫的生产商为二次开发封装了底层的AT指令,但是读者如果对AT指令非常了解,也可以实现自行封
9、装AT指令而构造短信猫的二次开发包。例如,读者将获取短信猫中插入的SIM卡的相关信息的AT指令封装为一个函数。,代码如下:01 void GetSIM() /封装的AT指令函数 02 03 . /省略部分代码 04 char data=“AT+CCID“; /定义AT指令字符数组 05 DWORD data; /定义变量保存实际写入的指令大小 06 BOOL istrue; /确定指令发送是否成功 07 istrue=WriteFile(handle, 16 17 ,在上面的代码中,读者可以看到像短信猫发送AT命令是通过串口进行传输的,函数WriteFile()的第一个参数handle表示串口
10、的句柄。但是,该种发送AT指令的方法仅适合于串口型的短信猫。 如果读者使用的短信猫为USB接口类型,则需要RS-232串口转USB接口的转换器实现通过串口发送AT指令。,3短信猫通信中间件,短信猫通信中间件是指一套专门的针对数据库接口的短信猫通信软件。读者使用该类型的通信中间件,仅需提交短信队列到数据库即可进行短信收发。因此,无论读者所使用的是哪一种开发语言进行短信猫的二次开发,只需要对其数据库进行读写即可。这种开发简单快速,节约开发成本,是目前最为快捷的一种短信应用开发模式。,4使用短信网关,短信网关是指由第三方开发的应用程序或提供的程序开发接口。一般情况下,这类短信网关都是基于网页提供给读
11、者使用的。通常,第三方首先将短信操作平台的相关功能集成到网页中。然后,读者便可以使用其提供的网页地址,将相关的数据转换为变量通过该网页地址传送到网页中的相关参数中。例如,读者假设一个第三方所提供的网页地址为“http:/ 参数mob表示读者在第三方处注册的电话号码。该电话号码是读者为了使用第三方所提供的短信网关而注册的,相当于读者名。 注意:当读者构造该网址时,必须将各个参数及其参数值之间使用符合“&”进行连接。 如果读者使用第三方所提供的短信网关。那么,读者在开发短信平台时,不需要再使用短信猫等相关的硬件设备了。而仅仅需要将短消息的相关内容进行组织以后,构造成第三方所规定的网址后,将其打开即
12、可。这种方法使用简单,易于实现。但是,其局限性非常大,读者会受到第三方的一些约束等。,15.2 实现与短信猫的硬件连接,读者使用短信猫时,应该首先确保PC与短信猫之间的硬件连接无误,方可进行相关的操作。所以,在本节中,将向读者介绍短信猫相关的硬件设备以及实现PC与短信猫的硬件连接方法。,15.2.1 短信猫的硬件设备,一般情况下,短信猫的硬件设备较为简单,主要由3部分组成。在本节中,将向读者介绍这些硬件设备的外型结构以及作用等。,1短信猫主机,首先,读者应该获得短信猫的主机,这是硬件中最重要的一部分。由于短信猫有两种接口模式。所以,读者可以根据需要选择合适的短信猫主机。例如,读者选择USB接口
13、的短信猫作为短信猫主机,如图15.5所示。,图15.5 USB接口短信猫,在图15.5中,所示的短信猫是USB接口模式的。如果读者需要使用串口模式的短信猫,则其外型结构如图15.2所示。一般情况下,读者选择USB接口的短信猫可以节约成本,缩短开发周期等。,2电源线与数据传输线,在短信猫与计算机之间需要一根数据线连接,才能实现数据通信。例如,读者使用的短信猫是USB接口,则数据线应该选择一根USB接口线。如果读者使用的短信猫是串口接口,则数据线选择一根串口线即可。 通常,USB接口的短信猫可以通过USB口由计算机供电进行工作。所以,读者使用USB接口的短信猫时,是不需要另外使用单独的电源线为其供
14、电的。但是,串口模式的短信猫需要读者单独配上相应的电源才能工作。,3天线,由于短信猫工作时,是无线传输数据信号的。所以,读者使用短信猫时,还需要为其配置相应的天线,如图15.6所示。 注意:短信猫的天线可以用来接收或者发送读者需要的数据等。当然,图15.6中所示的天线为一般插接式天线。该天线最大的缺点是安装过程较繁杂。,图15.6 短信猫天线,实际上,短信猫的天线还有一种吸盘式的天线。安装这种天线比较方便并且快速。当读者使用时,将其吸盘放置在短信猫上即可。其大致外型结构如图15.7所示。,图15.7 短信猫吸盘天线外型结构,上面所讲的硬件设备基本上就是短信猫的所有设备了。但是,读者进行二次开发
15、还需要短信猫生产商所提供的短信猫二次开发包。 在本节中,主要向读者介绍了短信猫的硬件设备及其外型结构和基本作用等。,15.2.2 PC连接短信猫,以USB接口短信猫为例,首先安装短信猫的驱动程序,如图15.8、15.9所示。,图15.8 安装驱动程序1,图15.9 安装驱动程序2,该驱动是将短信猫上的USB虚拟转换成了串口,安装好驱动后再接入USB连接的短信猫设备,此时Windows 7系统会自动检测并尝试为设备安装驱动,如图15.10所示。,图15.10 系统尝试安装驱动,系统的这种尝试多半会失败,因为系统优先尝试联网安装驱动,实际上驱动已经被安装在电脑上了,所以需要干预一下,即单击“跳过从
16、Windows Update获得驱动程序软件”链接,然后系统会从电脑上寻找驱动,如图15.11、15.12所示。,图15.11 跳过从Windows Update获取驱动操作,图15.12 驱动成功安装,由图可知驱动为USB虚拟的串口号为COM5,打开系统的设备管理器,如图15.13,可以到串口COM5,说明PC和短信猫连接成功。,图15.13 设备管理器,注意:不同的系统需要选择不同的驱动程序,目前知道Windows XP和Windows 7所需的驱动是不一样的,倒是Windows Vista和Windows 7驱动相同。,15.3 相关AT指令介绍,本章在前面的小节中,已经向读者讲解了短信
17、猫的相关硬件以及这些硬件的连接等。读者真正操作短信猫,还需要向其发送相应的指令,这些指令称为“AT指令”。在本节中,将向读者讲解短信猫中相应功能的AT指令代码。,15.3.1 AT指令介绍,AT指令是指计算机向其附加的硬件设备发送的相关功能命令,或者是计算机所带的硬件。例如,硬盘读写操作命令等。 通常情况下,读者可以通过选择“开始”|“运行”命令,打开计算机中的“运行”对话框,并在文本框中输入cmd,单击“确定”按钮,打开命令运行对话框,如图15.14所示。,图15.14 命令运行对话框,读者在该窗口的光标处输入“AT+空格+R”,即可阅读AT指令的相关帮助信息,如图15.15所示。,图15.
18、15 AT指令的相关帮助信息,注意:AT指令几乎被所有的计算机及其辅助硬件所支持,并且通过AT指令可以利用计算机向任何一种硬件发送相应的AT指令以实现相应的功能。,15.3.2 AT指令,在前面一节中,向读者大致介绍了AT指令的定义、作用及其发送方式等。为了使读者加深对AT指令的理解以及使用,在本节中将以表格的方式向读者介绍常用的AT指令及其功能含义,可以查看附录一。 一般情况下,读者可以方便地使用这些AT指令直接操作计算机辅助硬件设备等。例如15.1.3所讲示例,读者向短信猫发送AT指令,以获取SIM卡的序列号,当短信猫接收到该指令以后,会将SIM卡的序列号返回。这样,读者程序便可以从串口等
19、数据缓冲区中读取这一数据并显示即可。 注意:读者实际使用AT指令时,需要结合实际硬件生产商的相关说明文档进行指令的格式化。这是因为不同的硬件生产商可能会有不同的AT指令格式。但是,这些AT指令格式大体上是一样的。,15.4 短信发送规则,短信猫有三种方式发送和接收SMS信息:Block Mode, Text Mode和PDU Mode。其中PDU Mode被所有手机支持,可以使用任何字符集,这也是手机默认的编码方式。,15.4.1 Text模式,使用Text模式收发短信的代码很简单,实现起来也十分容易,这种模式即支持英文也支持中文短信的发送。,15.4.2 PDU模式,PDU(Protocol
20、 Data Unit,协议数据单元)模式,支持中文短信,也能发送英文短信。PDU模式收发短信可以使用3种编码:7-bit、8-bit和UCS2编码。 7-bit编码用于发送普通的ASCII字符;8-bit编码通常用于发送数据消息,比如图片和铃声等;UCS2编码用于发送Unicode字符。在这三种编码方式下,PDU串的用户信息段最大容量分别是160、140和70。这里,将一个英文字母、一个汉字和一个数据字节都视为一个字符。总之最多放140个字节,7-bit编码占不到一个字节,所以放的信息多些,UCS2编码占用2个字节,所以放的信息减少一半。,1.7-bit编码,编码过程如图15.16所示。,图1
21、5.16 7-bit编码过程,ASCII码的最高位都是0,去掉后就剩7位,依次将后面字节的后几位补在前面的字节上,重新构成8位的数据,即7-bit编码。,2.UCS2编码,Unicode目前普遍采用的是UCS2,它用两个字节来编码一个字符,比如汉字“你”的编码是0x7F60(注意字符编码一般用十六进制来表示,为了与十进制区分,十六进制以0x开头)。UCS2用两个字节来编码字符,两个字节就是16位二进制,2的16次方等于65536,所以UCS-2最多能编码65536个字符。编码从0到127的字符与ASCII编码的字符一样,比如字母“a”的Unicode编码是0x0061,十进制是97,而“a”的
22、ASCII编码是0x61,十进制也是97,对于汉字的编码,事实上Unicode对汉字支持不怎么好,这也是没办法的,简体和繁体总共有六七万个汉字,而UCS2最多能表示65536个,才六万多个,所以Unicode只能排除一些几乎不用的汉字,好在常用的简体汉字也不过七千多个。为了能表示所有汉字,Unicode也有UCS-4规范,就是用4个字节来编码字符,不过现在普遍采用的还是UCS2。,15.5 超级终端演示信息发送,我们可以通过超级终端来连接短信猫,再用AT指令与短信猫交互,实现短信的发送,而本章后面要讲解到的示例程序实际上就是模拟了这个过程,使得软件的使用者不必使用AT指令,只要单击按钮就能发送
23、短信了。 提示:超级终端是Windows XP系统默认提供给我们的工具软件,但是在Windows 7下默认不再提供,若有读者如笔者般喜爱那个工具的话,想在Windows 7下使用也不是不可能的。如图15.17是超级终端在Windows XP下的位置,依次单击“所有程序”|“附件”|“通讯”|“超级终端”。只要找到超级终端这个工具软件所在的位置,然后把它整个拷贝下来,再复制到Windows 7的任意文件夹下就可以使用了,如图15.18所示。,图15.17 Windows XP下超级终端的位置,图15.18 超级终端所在的位置,15.5.1 连接短信猫,双击打开超级终端,如图15.19所示,输入任
24、意名称,出现图15.20“连接到”对话框,选择与短信猫连接的串口,这里是COM5。,图15.19 连接描述,图15.20 连接串口选择,然后会弹出图15.21所示的“COM5属性”对话框,单击“还原为默认设置”即可,单击“确定”进入到超级终端主界面,如图15.22所示。,图15.21 “COM5属性”对话框,图15.22 超级终端主界面,输入AT指令,返回OK,则表面连接短信猫成功。,15.5.2 Text模式演示,(1)首先发送英文短信,如图15.23所示。,图15.23 发送英文短信,AT指令不区分大小写,大小写的指令的含义是一样的。AT+CSMP用来在文本模式下设置短信文本参数。 AT+
25、CSMP=, 参数含义如下: :参数的各个位如图15.24所示。,图15.24 参数的各个位,编号1、0的两位组合为0、1时表面发送方向是手机到消息中心,还有三种取值这里不做介绍。,:保留时间的设置。 0143:对应的保留时间为:(vp+1)*5分钟,最大为12小时。 :默认为0。 AT+CMGF用来设置文本的发送模式,设为1表示为Text模式,为0标识PDU模式。 AT+CMGS后紧跟接收信息的手机号码,在后输入要发送的英文,再按Ctrl+Z组合键即可发送短信,CMGS:119标识已发送短信的条数。,(2)再来发送中文短信,如图15.25所示。,图15.25 发送中文短信,大部分参数都介绍过
26、了,其中“6B228FCE51494E34”是中文“欢迎光临”Unicode编码的16进制表示,即每4个16进制位表示一个汉字。“6B22”表示“欢”。,15.5.3 PDU模式演示,选择UCS2编码可以同时发送中文和英文短信,如图15.26所示,发送的短信内容是:你好ABC。,图15.26 发送中英文短信,AT+CMGS=25表示从“11000”开始到“0043”字符字节数的一半,即一共有42个字符,那个非常长的串包含了很多的信息,下面来解析下那串字符,如图15.27所示。,图15.27 解析发送的字符串,提示:SIM卡短信中心号码可以通过AT指令AT+CSCA?获取,如图15.28所示。其
27、中返回的字串“+8613010701500”就是短信中心号码了。,图15.28 获取短信中心号码,按编号解析要发送的字符串,如下: “08”表示编号为2所指串的长度,用16进制表示。 “91”是短信中心号码类型,即国际化。“683110701005F0”是经过处理的短信中心号码,首先在号码后加字符F,凑成偶数个字符,即“8613010701500F”,然后交换奇、偶字符的位置即可。 “91”同样是国际化的意思。“682143651732F4”是经过处理的收信手机号码,同样要在号码后加字符F,凑成偶数个字符,即“8612345671234F”,然后交换奇、偶字符的位置即可。,“00”是协议标识,
28、点到点方式发送短信。“08”是数据编码方案,即UCS2编码,还可以是:“00”,即7-bit编码;“04”,即8-bit编码。最后的“00”是有效期。 “4F60597D004100420043”是具体的用户信息,即“4F60597D”是“你好”,“004100420043”是“ABC”。 其实发送的字符串也可以不包括编号为1和2的串,但串的前面需要加上“00”,如图15.29所示,同样短信成功发送了。,图15.29 发送短信的另一种方式,15.6 VC短信发送示例,这节将会以一个示例的开发为主,将前面所讲到的知识应用到程序中,最终我们会获得一个可以通过短信猫发送短信的对话框程序。,15.6.
29、1 示例展示,示例是基于对话框的应用程序,被命名为test,主对话框设计如图15.30所示。,图15.30 主对话框界面设计,示例程序的操作过程:填写对话框左半部分的“参数配置”信息,再单击“连接串口”按钮,操作成功的话会弹出2个提示框,如图15.31所示。然后再填写对话框右半部分的手机号和短信内容,根据内容和模式选择发送的按钮,就OK了。,图15.31 信息提示框,15.6.2 封装串口操作,将串口操作的声明和实现单独的放在两个文件中,分别命名comm.h和comm.cpp。封装可以使程序的代码更加的简洁,使用起来也更加方便。,1.打开串口,在头文件comm.h中声明用于打开串口的函数Ope
30、nComm(),在定义文件comm.cpp中实现如下:串口通信的函数如CreateFile ()、GetCommState()等,我们在第12和13章中详解讲解过,所以代码中就只是添加了注释。变量hComm是全局的,类型为HANDLE,用来保存串口设备句柄。函数OpenComm()需要的参数包括: pPort:串口号。 函数成功打开串口会返回TRUE。,2.写入串口,声明和定义串口写入函数WriteComm(),实现如下:函数WriteComm()的参数包括: pData:要写入串口的数据。 函数返回实际写入串口的字节数。,3.读取串口,声明和定义串口读取函数ReadComm(),实现如下:参
31、数含义和返回值同串口写入函数WriteComm()。,4.关闭串口,声明和定义串口关闭函数CloseComm(),实现如下:函数简单的关闭了串口设备句柄。最后来看一下串口操作头文件comm.h里各个函数的声明,如下:,15.6.3 连接串口,“参数配置”中各个控件的ID如图15.32所示。,图15.32 参数配置中控件ID,为4个组合框添加关联变量,类型和变量名如图15.33所示。,图15.33 关联变量类型和变量名,设计时为所有组合框属性的Data选项卡中添入相关的数据,如图15.34所示。,图15.34 组合框属性Data设置,添加按钮“连接串口”的单击响应函数OnConcomm(),编写
32、代码如下:响应函数OnConcomm()为了打开串口,需要获取用户输入的串口号、波特率等信息,然后使用封装好的函数OpenComm()打开串口。打开成功后还要通过函数WriteComm()写入AT指令,验证与短信猫的联通情况,返回OK时表明连接正常。,15.6.4 PDU模式短信,“短信发送”部分,各个控件ID如图15.35所示。,图15.35 短信发送部分控件ID,给ID为IDC_PHONENUM和IDC_CONTEXT的两个文本框添加关联变量m_phonenum和m_context,类型为CString。,1.发送方式1,为按钮“发送方式1”添加单击响应函数OnSendpdumsg(),代
33、码编写如下:乍看之下代码是比较长的,实际上主要完成4个工作:设置发信模式、获取短信中心号码、发送“AT+CMGS”命令、发送编码后的短信字符串。代码中最长的部分是用来编码短信字符串的,编码规则在第15.5.3节中有详细的介绍,这里主要讲下函数MultiByteToWideChar()的作用:将单字节字符映射为宽字节字符。,函数原型如下: int MultiByteToWideChar(UINT CodePage, / code pageDWORD dwFlags, / character-type optionsLPCSTR lpMultiByteStr, / string to mapint
34、 cbMultiByte, / number of bytes in stringLPWSTR lpWideCharStr, / wide-character bufferint cchWideChar / size of buffer ); 参数含义如下: CodePage:指定用来执行转换的代码页,代码页其实就是字符集。CP_ACP是指ANSI字符集。 函数执行成功会返回宽字符的个数。中文就属于宽字符,一个汉字在内存中是用2个字节存放的。,2.发送方式2,“发送方式2”按钮的单击响应函数,与“发送方式1”十分的类似,只是省去了获取短信中心号码和处理短信中心号码的操作而已,代码修改如下:函数
35、实际上完成3个工作:设置发信模式、发送“AT+CMGS”命令、发送编码后的短信字符串,大部分的代码是与发送方式1是一样的,不过需要注意字节数目的计算。,15.6.5 Text模式短信,Text模式发送短信是很简单的,不论中文还是英文。,1.发送英文,添加按钮“发送英文”的单击响应函数OnSendenglish(),代码编写如下:函数功能的实现,实际上是通过向短信猫发送3条AT指令,1串短信内容来实现的,即设置发信模式、设置发信内容为英文(单字节字符)、设置收信手机号码、最后发送可识别的英文文本。,2.发送中文,添加按钮“发送中文”的单击响应函数OnSendchinese(),代码编写如下:与“发送英文”按钮不同的是,发送的中文信息需要编码,然后转换为十六进制的字符串,这样的话短信猫才能识别。,15.7 小 结,本章先后介绍了短信猫、AT指令、短信发送规则、超级终端的使用,最后完成了一个可以发送短信的小程序。重点是要把协议规则搞清楚,VC程序的编写才会轻而易举。读者有兴趣可以再研究下收信规则、通话规则等等,然后完善示例程序,让其变得更加实用些。,