资源预览内容
第1页 / 共8页
第2页 / 共8页
第3页 / 共8页
第4页 / 共8页
第5页 / 共8页
第6页 / 共8页
第7页 / 共8页
第8页 / 共8页
亲,该文档总共8页全部预览完了,如果喜欢就下载吧!
资源描述
短信编码短信编码 PDUPDU 格式解析格式解析短信编码 PDU 格式解析(2010-07-26 09:08:25)转载标签: 杂谈 一、短消息收发的实现模式计算机串口上连接 GSM MODEM,用它向手机发送短消息,要求对 AT 指令集和串口编程比较熟悉。这种方法收发短消息又分三种模式:BLOCK 模式、TEXT 模式和 PDU 模式。BLOCK 模式现在用的很少了;TEXT 模式则只能发送 ASCII 码,它不能发送中文的 UNICODE 码确切地讲,从技术上来说是可以用于发送中文短消息的,但是国内的手机基本上不支持;而 PDU 模式开发起来则较为复杂,它需要编写专门的函数来将文本转换为 PDU 格式,但 PDU 模式被所有手机支持,可以使用任何字符集,它也是手机默认的编码方式。笔者在开发中正是选用的 PDU 模式。二、PDU 模式用 PDU 模式收发短消息可以使用三种编码: 7-bit 编码、8-bit 编码和 UCS2 编码。7-bit编码用于发送普通的 ASCII 字符;8-bit 编码通常用于发送数据消息,如图片或铃声等;UCS2编码用于发送 Unicode 字符。由于笔者在系统中要实现中文短消息的发送,所以选择用 UCS2编码,即中文 Unicode 码。(一)UCS2 编码原理所谓 UCS2 编码,是将单个的字符(1-2 个字节)按 ISO/IEC10646 的规定,转变为 16 位的 Unicode 宽字符。即将单个的字符转换为由四位的0-9 、A-F的数字和字母组成的字符串。待发送的消息以 UCS2 码的形式进行发送。(二)发送 PDU 串的编制分析通过 UCS2 编码我们得到中文 Unicode 码,接着就可以进行发送PDU 串的编制了。从表面上看,PDU 串是 ASCII 码串,同样由0-9 、 A-F这些数字和字母组成。它们是 8 位字节的十六进制数,或者 BCD 码十进制数。PDU 串除了包含所发送的消息本身外,还包含很多其它参数信息,如服务中心号码、目标号码和编码方式等。现用一个实例说明发送 PDU 串的结构和编排方式。例:08 91 683108100005F0 31 00 0D 91 683119109991F2 00 08 C2 06 60A8597DFF01参照规范,具体分析:分段含义解释说明08 SMSC 地址信息的长度共 8 个八位字节(包括 91)91 SMSC 地址格式(TON/NPI) 用国际格式号码(在前面加+)68 31 08 10 00 05 F0 SMSC 地址 8613800100500,补F凑成偶数个31 基本参数(TP-MTI/VFP) 要求发送回复00 消息基准值(TP-MR) 00D 目标地址数字个数共 13 个十进制数91 目标地址格式(TON/NPI)A1:国内格式91:国际格式81:未知,+86 可带可不带。683119109991F2 目标地址(TP-DA) 8613910199192,补F凑成偶数个00 协议标识(TP-PID) 是普通 GSM 类型,点到点方式08用户信息编码方式(TP-DCS)00:表示 7-bit 编码, 08:表示 UCS2 编码,04:表示 8-bit 编码。C2 有效期(TP-VP) 5 分钟06 用户信息长度(TP-UDL) 实际长度 6 个字节60 A8 59 7D FF 01 用户信息(TP-UD) “您好!”这里需要注意的几点:.比较 SMSC 地址分段:68 31 08 10 00 05 F0 与真实 SMSC 地址8613800100500F(为了凑足 14 位,在末尾补 F),不难发现只需将前者奇偶位对调即可得到后者。同样,目标地址分段 683119109991F2 与实际目标地址 13910199192F 之间的关系也是如此。.若“SMSC 地址信息的长度”分段的值为 00,则意味着 SMSC 地址字符串的长度为零,PDU 串的“SMSC 地址格式”段和“SMSC 地址”段将省去。且将使用 SIM 卡设置的 SMSC 地址。上例中的 PDU 串变为:00 31 00 0D 91 683119109991F2 00 08 C2 06 60A8597DFF01. 对于用户信息长度,可通过 VB 中的 Len 函数求得,如“您好!”,用 Len(“您好!”)得到是 3,那么 3*2=6 即为用户信息长度 06(这里要转换为 16 进制,并且是两位)。用户信息(TP-UD)段最大容量是 140 字节,所以在 UCS2 编码方式下,可发送短消息的最大字符数是 70 个。(三)UCS2 解码在接收消息时,可能不仅收到 UCS2 格式编码的 PDU 串,也可能是7bit 编码格式(TP-DCS 为 00)或 8bit 编码格式(TP-DCS 为 04)的 PDU 串。对这两种情况,笔者也编了相应的解码算法,且它们的算法要相对简单,由于着重介绍 UCS2 解码,7bit 与 8bit 解码就不再多介绍了。(四)接收 PDU 串的编制分析接收 PDU 串和发送 PDU 串结构是不完全相同的。通过一个实例来分析,假定收到的短消息其 PDU 串为:08 91 68 31 08 10 00 05 F0 04 0D 91 68 31 19 10 99 91 F2 00 08 40 40 60 31 35 3023 06 60 A8 59 7D FF 01参照规范,具体分析:分段含义解释说明08 SMSC 地址信息的长度共 8 个八位字节(包括 91)91 SMSC 地址格式(TON/NPI) 用国际格式号码(在前面加+)68 31 08 10 00 05 F0 SMSC 地址 8613800100500,补F凑成偶数个84 基本参数(TP-MTI/MMS/RP) 接收,无更多消息,有回复地址0D 回复地址数字个数共 13 个十进制数(不包括 91 和F)91 回复地址格式(TON/NPI) 国际格式68 31 19 10 99 91 F2 回复地址(TP-RA) 8613910199192,补F凑成偶数个00 协议标识(TP-PID) 是普通 GSM 类型,点到点方式08 用户信息编码方式(TP-DCS) UCS2 编码40 90 10 31 35 30 23 服务时间戳(TP-SCTS) 2004-09-01 13:53:0306 用户信息长度(TP-UDL) 实际长度 6 个字节60 A8 59 7D FF 01 用户信息(TP-UD) “您好!”通过分析,我们可以获取其中的有用信息。如:短信服务中心号码是+8613800100500,发送方号码是 13910199192,发来的消息内容是“您好!” ,以及发送时间是:2004-09-0113:53:03。=PDU 是大多数手机短信通讯的核心, 仅有少数手机只支持 Text 模式。 PDU 模式式可以提供能为强大的功能,但其编码较 Text 模式困难。无论哪种模式,我们AT 指令控制终端实现短信的发送、接收、删除等管理。下面主要介绍 PDU 的构码。PDU 的构成PDU 是一串由“0-9”及“A-F”组成的字符串。表面上看起来就是一组 16 进成的。下面举一个发送和接收的例子。1、 手机发送的一个 PDU 串:0891683108200805F011190D91683188902848F40008FF108FD9662F4E0067616DFE对比 3GPP 协议得到:(二进制代码从左到右依次为高位-低位)短信中心地址字段08 地址长度:8 个字节,包括其后的 9191 地址类型:10010001Bit7:1。始终为 1 Bits 6,5,4:Type-of-Number(号码类型):001,代表 Internation Number。也即是号码前加“+” 。注意:对某些比较特殊的号码,例如手机与小灵通的互通时,这里不能设置为 001,而要设置成 000,代表号码前没有“+” ,否则无法接收。Bits 3,2,1:Numbering-plan-identification:一般默认为 0001,表示电话号码类型的。683108200805F0 短信中心号码:一个字节内反转,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 01TP-MTI:01TP-Message-Type-Indicator(消息类型指示符)Bit1,0:01 指示为 SMS-SUBMIT 类型TP-RD:0TP-Reject-Duplicates(是否拒绝相同重复消息)Bit2:0 指示短消息中心接受未转发的具有相同 TP-MR 的消息。TP-VPF:10TP-Validity-Period-Format(有效期格式)Bit4,3:10 指示使用相对格式。TP-SRR:0TP-Status-Report-RequestBit5:0 指示不使用状态报告。TP-UDHI:0TP-User-Data-Header-Indicator(用户数据头标示) Bit6:0 指示这是一个 SMS 消息,没有用户数据头。EMS 消息需要设置。TP-RP:0TP-Reply-Path(回复路径)Bit7:0 指示没有设置回复路径。消息参考值 TP-MR19 TP-Message-Reference对方号码字段0D91683188902848F4其结构与短信中心号码字段部分类似,不再赘述。协议标识 TP-PID00 TP-Protocol-Identifier(上层协议指示) ,一般设置为 00,表示普通 GSM,点对点编码方法 TP-DCS08 TP-Data-Coding-Scheme(数据编码设置) ,指示 TP-UD 的编码方式。08 代表Unicode 方式;00 为 7Bit 编码(只适用于不含中文的短信)有效期 TP-VPFF TP-Validity-Period(有效期) 。FF 表示最大。用户数据长度 TP-UDL10 TP-User-Data-Length(用户数据长度)0x10 长度。注意不同编码下用户长度定义不同。用户数据 TP-UD8FD9662F4E0067616D4B8BD577ED4FE TP-User-Data中文“这是一条测试短信”的 Unicode 编码2、 手机接收的 PDU 串0891683108200805F0040D91683188902848F4000850208151754500108FD9662F4E0067616D4B8BD577ED4FE1短信中心地址字段0891683108200805F0:+861380280500FirstOctet04其二进制代码:00000100TP-MTI:00TP-MMS(TP-More-Message-to-Send):1 短信中心没有更多的消息发送TP-SRI:0TP-UDHI:0TP-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用户数据8FD9662F4E0067616D4B8BD577ED4FE1 TP-UD中文“这是一条测试
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号