`

短信开发基础知识

 
阅读更多

 

1.1. 基本知识

短信开发指通过串口 at 命令驱动短信进行短信发送和接收操作。 

短信操作分为三种模式 block,pdu  Text

短信传送有三种编码 7 位, 8 位, UniCode

at 命令 ,at 命令是驱动短信设备的标准工业命令,除了业界的标准之外,每个厂商可能会对其进行扩展,不过一般来说,标准命令应该够用,这次用的是西门子 tc35i ,有专门的 at 命令文档。

 

 

1.1.1.     相关文档

Gsm03.38 规范: Alphabets and language-specific information 着重介绍短信发送中对字符集的控制部分

Gsm03.40 规范: Technical realization of the Short Message Service (SMS) Point-to-Point (PP) 详细介绍各种不同短信的不同实现

Gsm07.05 规范: Use of Data Terminal Equipment - Data Circuit terminating;Equipment (DTE - DCE) interface for Short Message Service (SMS) and Cell Broadcast Service (CBS) ,介绍 at 的一些控制命令。

Gsm07.07 规范:着重介绍 at 的短信相关命令,可以说是 at  sms 规范。

1.1.2.     Block 模式

Block 模式基本已经被 pdu 模式取代,没有具体研究

1.1.3.     Text 模式

Text 模式比较简单,但是支持的设备不是很全,而且对于中文似乎有些问题,在金笛的网站技术资料中似乎提到了一句不能实现中文。

AT  CGMF=1<CR>

AT  CGMS=  13605696031  ,129<CR> 
>Hello World!<^Z>

1.1.4.     Pdu 模式

pdu 编码主要包括两个主要的部分,一是 pdu 串的整体数据格式,分别因为发送信息串和接收信息串而有区别,二是 pdu 中文本部分的编码,分别因为字符集而不同。

我们也可以这样来理解这个 pdu 编码的格式, sms 相当于一个协议栈,最简单的协议栈:

根据 gsm03.40 规范, sms 协议包括以下几层:

1、  SM-AL :应用层。这个部分就是数据部分。

2、  SM-TL :传输层。我们可以清楚的看到这里描述了主要的短信内容,包括发送号码,接收号码,信息类型,编码,数据报长度等等,这也是我们编程主要要面对的问题。

3、  SM-RL :中继层。这个指的是短信在网关之间中继需要的协议。

4、  SM-LL: 链路层。

从上述描述中我们可以清楚的看到,我们编程主要集中于传输层。

 

PDU 串的用户信息 (TP-UD) 段最大容量是 140 字节,所以在这三种编码方式下,可以发送的短消息的最大字符数分别是 160  140  70 。这里,将一个英文字母、一个汉字和一个数据字节都视为一个字符。

 

1.2. SMS 用户数据的编码方法

1.2.1.     英文 7 位编码

 

图片不能正确显示

这是
 gsm 的默认编码方式

由于这样的移位,我们可以看到我们能发的最多英文字符等于: 140*8/7 = 160 

1.2.2.     数据 8 位编码

8-bit 编码通常用于发送数据消息,比如图片和铃声等;

1.2.3.     中文 pdu 编码

发送中文时,必须用 UCS2  utf-16 )进行编码,最多可以发 140/2  70 个汉字。

UniCode 编码转换也比较简单,以中文为例,一个中文字符是两个字节,直接对高位字节和低位字节进行十六进制转换就可以了。如“欢迎”, UniCode 编码是 6B22 8FCE ,这同时也就是转换的结果,如果发送的串中有英文字符,那么在前面补全 00 ,以保证一个字符对应两个字节。

1.2.4.     Wap-push 中的中文编码

 wap-push 短信的时候有些问题了,开始的时候也按照 Unicode 编码处理,总是失败,后来才发现,有个编码字段设为了 uft-8 ,所以在这种情况下,还是可以出现其他编码方式的。

 

1.3. 短信报头分析

1.3.1.     短信类型

详细请参考 gsm 0438 规范和 gsm0440 规范,里面有详细的关于各种短消息类型的描述。

 sms 中到底支持多少种类型的短信,短信类型由什么进行控制,这是我们在这里需要着重介绍的问题。

在传输层来分,一共有六大短信类型: SMS-DELIVER  SMS-DELIVER-REPORT  SMS-SUBMIT

 SMS-SUBMIT-REPORT  SMS-STATUS-REPORT  SMS-COMMAND ,这六种短信类型,由短信中心地址后的第一个字节的最低两位控制。

 

bit1

bit0

Message type

0

0

SMS-DELIVER (in the direction SC to MS)

0

0

SMS-DELIVER REPORT (in the direction MS to SC)

1

0

SMS-STATUS-REPORT (in the direction SC to MS)

1

0

SMS-COMMAND (in the direction MS to SC)

0

1

SMS-SUBMIT (in the direction MS to SC)

0

1

SMS-SUBMIT-REPORT (in the direction SC to MS)

1

1

Reserved

 

也就是说,每个短信在短信中心地址之后的第一个字节的最低两位是至关重要的。他决定了如何读这条短信(结合是发送的,还是接收的)

1.3.2.    地址编码

短信发送中都会涉及到短信地址的问题,他们的编码规则是一致的 , 简单来说就是 BCD8421编码

如: 08 91 683108501505F 0 

08 :地址长度,(号码类型 + 号码长度) /2 的十六进制表示

91 :号码类型

683108501505F 0 :号码,实际号码应为: 8613805515500 ,号码处理方法为 , 如果为 +86 开始 ,  + 号去掉 ,然后判断是否为偶数 , 不是在末尾补 F, 然后将奇数位和偶数位互换

1.3.3.     TP-DCS( 数据编码格式 )

这个字节比较特殊,表明整个短信的字符编码,数据内容等信息。详细说明参考 gsm03.38 规范。

1.3.4.     第一个字节

Pdu 编码的第一个字节比较有意思,这个字节会根据六种不同的短信按位有不同的意思,拿句专业一点的话来说,叫bitmask. 用图来大概描述一下,详细参考 gsm0340  9.2.3 段。

 

 

位数

MSG_Deliever

MSG_SUBMIT

7

TP_RP (回复地址)

TP_RP

6

TP_UDHI (数据报头)

TP_UDHI

5

TP_SRI (需要回复)

TP_SRR (请求回复)

4

 

TP_VPF( 时间格式 )

3

 

2

TP_MMS (多条短信标志, 1为无, 0 为有)

TP_RD( 拒绝重复标志 )

1  0

TP_MTI (短信类型)

TP_MTI

常见值

04 ,正常收到, 44 ,有报头短信

11 ,正常发送, 51 ,有报头短信

1.3.5.     TP-PID (协议标识)

在这个里面还有一个字节比较特殊,就是协议标识。

一般都是 00 ,表示点到点的标准短信。

1.3.6.     超长短信

参考 gsm0340  9.2.3 .24TP_UD 部分,这个部分中间的一种情况就是描述超长短信的处理。

长短信关键涉及一个数据报头的问题,数据报头由“长度”和多个“数据元素”组成。

GSM协议规范中,每个短信息的长度不应超过140Octs,故每次发送最多70Unicode单元;如果需要发送超长短信息,只需将要发送信息进行分割(70Unicode单元编码为1408-bit组,加如上前缀14个,单条PDU最大长度为154 Octs),即可完成任意长度的消息发送。下面是个例子,表明的是短信的第一条和第二条。

第一条:                              第二条

0891683108701505F0 SMSC 地址          0891683108701505F0 SMSC 地址

44有协议头标志                        44有协议头标志

0D91683127563658F0回复地址            0D91683127563658F0回复地址

0008 TP-PID TP-DCS                  0008 TP-PID TP-DCS

70803011142423时间戳 (TP-SCTS)        70803011142423时间戳 (TP-SCTS)

8C 用户信息长度 (TP-UDL)              26用户信息长度 (TP-UDL)

05协议头的长度                        05协议头的长度

00标志这是个分拆短信                  00标志这是个分拆短信

03分拆数据元素的长度                  03分拆数据元素的长度

39唯一标志(用于把两条短信合并)      39唯一标志(用于把两条短信合并)

02一共两条                            02一共两条

01这是第一条                          02这是第二条

4E8C96F64E005B……数据内容1           81EA4ECE524D5C3……数据内容2

 

假设短信内容前6位是: 0500037E0201 05 03 02 00 7E 01 05 - 协议长度(后面占5位) 00 - 表示拆分短信 03 - 拆分数据的长度(后面的3位) 7E - 唯一标识(用于把多条短信合并) 02 - 共被拆分2条短信 01 - 序号,这是其中的第1条短信 那么,第2条短信的头6位数据就应该是: 0500037E0202

 

 

 

 

分享到:
评论

相关推荐

    SP_短信开发-基础知识篇2(MISC系统短信SP接入培训

    在SP短信开发中,MISC系统短信SP接入是至关重要的环节。MISC系统(Mobile Internet Service Center,移动互联网服务中心)是运营商...对于SP而言,掌握这些基础知识并进行细致的实践是成功接入和提供短信服务的基础。

    sms短信方面的开发

    以上就是Android平台上的短信开发基础知识,包括短信的发送和接收。在实际开发中,还需要考虑到各种异常处理、用户交互、以及不同Android版本的兼容性问题。希望这个概述能帮助你在Android SMS开发中取得成功。

    java 短信开发 demo

    Java短信开发Demo主要涉及到的是Java在通信领域中的...以上就是基于"java 短信开发 demo"的Java短信服务开发中涉及的主要知识点。在实际开发中,还需要根据具体的业务需求和短信服务提供商的具体API进行适配和调整。

    手机开发原理,手机基础知识

    手机开发原理与基础知识是移动应用开发的基石,涵盖了硬件、操作系统、网络通信等多个领域。本文将深入探讨手机的运行机制,解析其基本功能和应用功能,以及涉及的通信制式。 首先,我们要理解手机硬件的基本构成。...

    Android短信数据库基础(开发资料)

    总结起来,Android短信数据库的基础知识涉及数据库的路径、主要表格及它们之间的关联。通过掌握这些知识,开发者可以有效地读取、管理和操作Android设备上的短信数据,从而实现各种定制化的短信功能。

    20070411am--实例开发Windows Mobile进阶:短信开发大全

    通过上述知识点的介绍,我们可以看到,在Windows Mobile平台上进行短信开发时,需要掌握一系列API函数的使用方法,包括发送短信的API函数(`SmsOpen`, `SmsSendMessage`, `SmsClose`)和接收短信的相关接口(`...

    Android开发基础习题

    ### Android开发基础习题知识点解析 #### 一、填空题知识点解析 1. **Android系统是由** **Google** **开发的。** - **知识点解释:** Android是一款基于Linux内核的操作系统,最初由Andy Rubin开发并在2003年...

    sgip客户端短信开发

    【SGIP客户端短信开发】是中国联通SP服务提供商为了实现与短信中心(SMSC)通信而进行的一种技术开发。SP(Service Provider)是提供各种增值服务的运营商,如新闻订阅、彩铃下载等,它们需要通过SGIP协议来发送和...

    华为短信开发包(Java)

    华为短信开发包主要针对的是企业级的短信服务,它提供了多种协议的支持,包括CMPP2、CMPP3、CNGP、SGIP、SMGP和SMPP,这些协议是通信行业中用于短信传输的标准协议。下面将详细介绍这些协议以及与它们相关的Java开发...

    移动MAS短信开发Demo(ASP)

    【移动MAS短信开发Demo(ASP)】是一种基于ASP(Active Server Pages)技术构建的应用程序,主要用于实现企业级的短信发送功能。在IT行业中,移动MAS(Mobile Application Server)通常指的是中国移动为企业提供的移动...

    VFP 短信开发例程

    【VFP短信开发例程详解】 Visual FoxPro(VFP)是Microsoft推出的一款数据库开发工具,以其简单易用和高效灵活的特点,在过去广泛...同时,理解并掌握这些知识点,也为你后续学习其他编程语言和通信技术奠定了基础。

    短信DLL开发包

    1. **DLL基础知识**:DLL(Dynamic Link Library)是Windows平台下的一个重要组件,它允许不同程序共享同一块代码或数据,减少内存占用,提高系统效率。开发者可以通过API函数来调用DLL中的功能。 2. **C++Builder*...

    短信开发各语言开发例子

    在每个语言的示例中,开发者需要了解网络通信、HTTP请求、错误处理和日志记录等基础知识。同时,理解短信服务提供商的API文档,掌握如何正确构造请求和解析响应也是至关重要的。此外,考虑到短信发送的安全性,比如...

    JAVA短信开发包,完整版

    Java短信开发包是一个专...在学习和使用这个Java短信开发包时,要确保仔细阅读提供的文档,理解每个示例代码的功能,以及如何将这些知识点应用到实际项目中。通过不断实践和学习,你将在短信服务开发领域变得更加熟练。

    VC++开发手机短信程序

    为了实现这样的程序,你可能需要参考相关书籍、在线教程、SDK文档以及论坛讨论,以获取更多关于VC++和手机短信开发的知识。同时,实践是提升技能的关键,尝试编写小程序并逐步扩展功能,将是掌握这项技术的有效途径...

    SMS短信程序开发资料大全1-12个文件Rs00000041866

    下面,我们将深入探讨短信程序开发的关键知识点。 1. **SMS协议理解**:短信程序开发的基础是理解SMS(Short Message Service)协议,包括它的基本工作原理、数据格式以及与手机网络的交互方式。这涉及到GSM 03.40...

    串口短信开发手册

    通过对《串口短信开发手册》的深入分析,我们可以看出这份文档不仅提供了关于如何使用AT协议进行短信功能开发的基础知识,还详细阐述了具体的实现方法和技术细节。这对于想要在嵌入式系统或其他项目中集成短信功能的...

    短信平台开发实践及案例

    短信平台开发实践及案例的知识点可以从以下几个方面展开: 1. 开发前的准备 首先,为了开发短信平台,开发者需要选择合适的开发工具和环境。在本案例中,开发团队选择了JDK 1.6作为Java开发的基础环境。安装JDK后,...

    短信猫二次开发发送短信代码

    根据提供的文件信息,本文将详细解析“短信猫二次开发发送短信代码”的相关知识点,包括AT指令的基本概念、底层编写方式以及具体的短信发送流程。 ### 一、AT指令基础 AT指令(AT Command)是一种用于控制调制解调...

Global site tag (gtag.js) - Google Analytics