`

短信开发基础知识

阅读更多

 

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 短信开发-基础知识篇2(MISC系统短信SP接入培训)

    C#_开发短信功能

    本文就来探讨一下另外一种通过Visual C#发送短信息的简单实现方法,这种方法在实现过程中比我们想象的要简单许多,只需拥有Visual C#一般编程基础,并确定您的计算机接入互联网即可。下面就来详细介绍一下Visual C#...

    新媒体写作知识点.doc

    在信息时代,不仅是新的技术变革和物质形态的变化可以产生新媒体,新的软件开发, 新的信息服务方式的推出都可以称之为一种新媒体的诞生。 广播,电视相对于印刷媒体是新媒体,但对于网络媒体便是"旧媒体"。每一次...

    Android任务驱动式教程.pdf

    《Android任务驱动式教程》通过一个手机文件管理器的案例设计全面介绍Android平台开发的基础知识,循序渐进地介绍使用 Android开发手机应用程序的实战技术,使读者不仅能够学习到Android操作系统的架构和基本原理,...

    Google Android SDK开发范例大全源码 无解压密码

     本书讲述由浅入深,由Android的基础知识到实际开发应用,结构清晰、语言简洁,非常适合Android的开发者和Android的进阶程序开发者学习。 csdn 另外一个版本有解压时需要密码,本资源无解压密码。

    Android应用开发深入学习实录 pdf

    接下来详细讲解了Android 核心应用的核心内容,主要包括电话/短信处理、GPS 定位、网络应用开发、多媒体项目开发、手机游戏开发等知识点的具体用法;然后讲解了Android 的高级知识,主要包括Android 典型模块、...

    Android SDK开发范例大全(第2版)源码

    本书在上一版的基础上,以Android手机应用程序开发(采用Android SDK 2.1... 本书讲述由浅入深,由Android的基础知识到实际开发应用,结构清晰、语言简洁,非常适合Android的初学者和Android的进阶程序开发者阅读参考。

    Google Android 开发大全

    本书以Android手机应用程序开发为主题,通过130多个范例全面且深度地... 本书讲述由浅入深,由Android的基础知识到实际开发应用,结构清晰、语言简洁,非常适合Android的初学者和Android的进阶程序开发者阅读参考。

    Google Android 开发大全2

    本书以Android手机应用程序开发为主题,通过130多个范例全面且深度地... 本书讲述由浅入深,由Android的基础知识到实际开发应用,结构清晰、语言简洁,非常适合Android的初学者和Android的进阶程序开发者阅读参考。

    RTX Client SDK 集成开发

    全文档共包括七章,分门别类介绍了 RTX Client SDK 的知识,全面深入地讲解了 RTX Client SDK 的各项功能,各章节层次分明,先介绍基础原理,再分析各种具体的技术手段,最后是解决方案举例。即能让读者系统的学习...

    Android SDK开发范例大全(第二版)

    本书在上一版的基础上,以Android手机应用程序开发(采用Android SDK 2.1)... 本书讲述由浅入深,由Android的基础知识到实际开发应用,结构清晰、语言简洁,非常适合Android的初学者和Android的进阶程序开发者阅读参考。

    Google Android SDK开发范例大全(第3版).pdf

    内容简介 《Google Android SDK开发范例大全...《Google Android SDK开发范例大全(第3版)》内容由Android的基础知识到实际开发应用,结构清晰、语言简洁,非常适合Android的初学者和Android的进阶程序开发者阅读参考。

    Visual C++网络编程案例_part2.rar

    第1篇介绍了Visual C++网络开发基础知识,包括Visual C++网络编程概述、Socket套接字编程和多线程与异步套接字编程。第2篇介绍了7大类网络开发典型应用案例的实现,包括FTP客户端实现之一、 FTP客户端实现之二、网页...

    Google Android SDK开发范例大全(第3版)

    《Google Android SDK开发范例大全(第3版)》...《Google Android SDK开发范例大全(第3版)》内容由Android的基础知识到实际开发应用,结构清晰、语言简洁,非常适合Android的初学者和Android的进阶程序开发者阅读参考。

    Visual C++网络通信开发入门与编程实践.pdf(中文高清版)及源码

    第1篇介绍了Visual C++网络开发基础知识,包括Visual C++网络编程概述、Socket套接字编程和多线程与异步套接字编程。第2篇介绍了7大类网络开发典型应用案例的实现,包括FTP客户端实现之一、 FTP客户端实现之二、网页...

    android sdk开发范例大全光盘资源(第三版)

     全书共分11章,主要以范例集的方式来讲述Android的知识点,详细介绍了开发Android的人机交互界面、Android常用的开发控件、Android手机收发短信等通信服务、开发Android手机的自动服务功能和娱乐多媒体功能以及...

    Google Android SDK开发范例大全 源码

    本书讲述由浅入深,由Android的基础知识到实际开发应用,结构清晰、语言简洁,非常适合Android的初学者和Android的进阶程序开发者阅读参考。 作者简介编辑 余志龙,来自于手机制造业、电视媒体业、网络、电信产业、...

    Google Android SDK开发范例大全(With Bookmarks).part2

    共三个Part 这是Part2 内容简介  本书以Android手机应用程序开发为... 本书讲述由浅入深,由Android的基础知识到实际开发应用,结构清晰、语言简洁,非常适合Android的初学者和Android的进阶程序开发者阅读参考。

    Google Android SDK开发范例大全(With Bookmarks).part3

    附带书签,共三个Part 这是Part3 内容简介  本书以Android手机应用... 本书讲述由浅入深,由Android的基础知识到实际开发应用,结构清晰、语言简洁,非常适合Android的初学者和Android的进阶程序开发者阅读参考。

    java web信息管理

    java web项目,某公司的信息管理系统项目,包括数据库sql文件。

Global site tag (gtag.js) - Google Analytics