.net平台手机管理软件开发(9)—— 短信部分之PDU简介及其格式

** (九) ** ** 短信部分—— PDU ** ** 简介及其格式 **

PDU 是大多数手机短信通讯的核心,仅有少数手机只支持 Text 模式(例如笔者的 MOTO C330 )。 PDU 模式比起 Text 模式可以提供能为强大的功能,但其编码较 Text 模式困难。无论哪种模式,我们都可以通过 AT 指令控制终端实现短信的发送、接收、删除等管理。下面主要介绍 PDU 的构成及编码解码。

** PDU ** ** 的构成 **

PDU 是由一串由“ 0 -9 ” 及“ A-F ”组成。表面上看起来就是一组 16 进制的数所组成的。

下面举一个发送和接收的例子。

1、 手机发送的一个 PDU 串:

0891683108200805F0 11 19 0D91683188902848F4 00 08 FF 10 8FD 9662F 4E0067616D4B8BD577ED4FE

对比 3GPP 协议得到:(二进制代码从左到右依次为高位 -> 低位)

** 短信中心地址字段 **

** 08 ** 地址长度: 8 个字节,包括其后的 91

** 91 ** 地址类型: 10010001
Bit7 : 1 。始终为 1
Bits 6,5,4 : Type-of-Number (号码类型): 001 ,代表 Internation Number 。也即是号码前加“ + ”。 注意 :对某些比较特殊的号码,例如手机与小灵通的互通时,这里不能设置为 001 ,而要设置成 000 ,代表号码前没有“ + ”,否则无法接收。

Bits 3,2,1 : Numbering-plan-identification :一般默认为 0001 ,表示电话号码类型的。

** 683108200805F ** ** 0 ** 短信中心号码:一个字节内反转, 8613800280500 ,如果长度为奇数则需要加“ F ”补齐

** FirstOctet ** ** 字段 **

** 11 ** 包含 TP-MTI(2bit) , TP-RD(1bit) , TP-VPF(2bit) , TP-RP ( 1bit ), TP-UDHI(1bit) , TP-SRR(1bit)

二进制表示形式: 0 0 0 10 0 01

** TP-MTI ** ** : 01 **

TP-Message-Type-Indicator (消息类型指示符)

Bit1,0 : 01 指示为 SMS-SUBMIT 类型
TP-RD ** : 0 **

TP-Reject-Duplicates (是否拒绝相同重复消息)

Bit2 : 0 指示短消息中心接受未转发的具有相同 TP-MR 的消息。

** TP-VPF ** ** : 10 **

TP-Validity-Period-Format (有效期格式)

Bit4,3 : 10 指示使用相对格式。

** TP-SRR ** ** : 0 **

** ** TP-Status-Report-Request

Bit5 : 0 指示不使用状态报告。

** TP-UDHI ** ** : 0
** TP-User-Data-Header-Indicator (用户数据头标示)
Bit6 : 0 指示这是一个 SMS 消息,没有用户数据头。 EMS 消息需要设置。

** TP-RP ** ** : 0
** TP-Reply-Path (回复路径)
Bit7 : 0 指示没有设置回复路径。

** 消息参考值 TP-MR **

19 TP-Message-Reference

** ** ** 对方号码字段 **

** ** 0D91683188902848F4

其结构与短信中心号码字段部分类似,不再赘述。

** 协议 ** ** 标识 ** ** TP-PID **

** ** 00 TP-Protocol-Identifier (上层协议指示),一般设置为 00 ,表示普通 GSM ,点对点
** ** ** 编码方法 TP-DCS **

08 TP-Data-Coding-Scheme (数据编码设置),指示 TP-UD 的编码方式。 08 代表 Unicode 方式。 00 为 7Bit 编码

** ** ** 有效期 TP-VP **

FF TP-Validity-Period (有效期)。 FF 表示最大。

** 用户数据长度 TP-UDL **

10 TP-User-Data-Length (用户数据长度) ** **

0x10 长度。注意不同编码下用户长度定义不同。

用户数据 TP-UD ** **

8FD 9662F 4E0067616D4B8BD577ED4FE TP-User-Data
中文“这是一条测试短信”的 Unicode 编码

2、 手机接收的 PDU 串

0891683108200805F0 04 0D91683188902848F4 00 08 50208151754500 10 8FD 9662F 4E0067616D4B8BD577ED4FE1

** 短信中心地址字段 **

** ** 0891683108200805F0 : +861380280500

** FirstOctet **

** ** 04

其二进制代码: 00000 1 00

TP-MTI : 00

TP-MMS(TP-More-Message-to-Send) : 1 短信中心没有更多的消息发送

TP-SRI : 0

TP-UDHI : 0

TP-RP : 0

** 发送方号码 **

0D91683188902848F4 : +8613880982844

** 协议标识
** 00 TP-DCS 点对点

** 编码方式 **

08 TP-DCS Unicode 编码

短信中心时间戳
50208151754500 TP-SCTS 字节反转 05/02/18 15 : 57 : 45 最后的 00 代表时区,这里为 0

用户数据长度

10 TP-DHL

用户数据

8FD 9662F 4E0067616D4B8BD577ED4FE1 TP-UD

中文“这是一条测试短信”的 Unicode 编码

Published At
Categories with Web编程
Tagged with
comments powered by Disqus