温少的日志

我希望我所作的事情对别人有所帮助!
随笔 - 180, 文章 - 1, 评论 - 1079, 引用 - 6
数据加载中……

超长短信的处理办法

GSM 03.40规范(TP-06 1999-12-15 7.4.0)中规定了SME对于超长短信的合并处理。规范制定至今,已经超过6年,绝大多数正在使用的手机,都支持这一功能。

CMPP协议中,CMPP_SUBMIT_MESSAGE中有两个字段pk_total和pk_numer,恰看起来,这就是发送超长短信的设置参数,其实不然,这两个参数的设置,应该是没有用处。

发送超长短信,需要做两件事情:设置TP_udhi的值设置为1,在消息正文中增加协议头。协议后可以两种格式,分别是长度为6和长度为7的协议头。格式如下:
6位协议头格式:05 00 03 XX MM NN
byte 1 : 05, 表示剩余协议头的长度
byte 2 : 00, 这个值在GSM 03.40规范9.2.3.24.1中规定,表示随后的这批超长短信的标识位长度为1(格式中的XX值)。
byte 3 : 03, 这个值表示剩下短信标识的长度
byte 4 : XX,这批短信的唯一标志,事实上,SME(手机或者SP)把消息合并完之后,就重新记录,所以这个标志是否唯一并不是很重要。
byte 5 : MM, 这批短信的数量。如果一个超长短信总共5条,这里的值就是5。
byte 6 : NN, 这批短信的数量。如果当前短信是这批短信中的第一条的值是1,第二条的值是2。
例如:05 00 03 39 02 01

7位的协议头格式:06 08 04 XX XX MM NN
byte 1 : 06, 表示剩余协议头的长度
byte 2 : 08, 这个值在GSM 03.40规范9.2.3.24.1中规定,表示随后的这批超长短信的标识位长度为2(格式中的XX值)。
byte 3 : 04, 这个值表示剩下短信标识的长度
byte 4-5 : XX XX,这批短信的唯一标志,事实上,SME(手机或者SP)把消息合并完之后,就重新记录,所以这个标志是否唯一并不是很重要。
byte 6 : MM, 这批短信的数量。如果一个超长短信总共5条,这里的值就是5。
byte 7 : NN, 这批短信的数量。如果当前短信是这批短信中的第一条的值是1,第二条的值是2。
例如:06 08 04 00 39 02 01

7位协议头和6位协议头的区别是,6位协议头短信的标识字段是1个byte,而7位协议头短信的标志字段为2个byte。大多手机采用6位的协议头,也就是05 00 03 XX MM NN。

发送的短信这么处理,接受短信反过来就可以了。上述内容,在CMPP协议以及多款手机上经过测试验证。

posted on 2006-07-07 22:30 温少 阅读(3534) 评论(14)  编辑 收藏 网摘 所属分类: 推荐阅读

评论

#1楼    回复  引用    

温少又开始研究短信协议了呀,呵呵,
2006-07-16 20:53 | cownew [未注册用户]

#2楼    回复  引用    

google了一圈,只找到你这个有用的说明,不过没看懂,CMPP3.0协议中为什么不加这些内容呢?
2006-09-05 15:48 | the [未注册用户]

#3楼    回复  引用    

刚用这个方法试了一下,一submit网关就把我断开了~~~不知道是不是我的测试有问题??
2006-09-05 16:19 | the [未注册用户]

#4楼    回复  引用    

我看cmgp3.0协议里, 字段pk_total和pk_numer一般是用来控制对同一linkid上行需要下行多条短信的时候就需要设置这个,因为默认的是用户一条上行短信只允许sp下行一条下去。
2006-09-06 09:43 | lizongbo [未注册用户]

#5楼    回复  引用    

sofank
2006-10-10 08:12 | julianwu1 [未注册用户]

#6楼    回复  引用    

我照温少的方法试过了,还是不行,温少是否可以有现成的代码给我们参考一下。
2006-11-28 21:18 | Coolio [未注册用户]

#7楼 [楼主]   回复  引用  查看    

@Coolio
明确告诉你,我说的方法可行,每个人都需要一个冒险乐园,所以不会给出代码的……
2006-11-29 10:59 | 温少      

#8楼    回复  引用    

有一个问题,中文简讯 TP-DCS=08 的时候可以,可是 TP-DCS=00 的英文简讯就不能。。。。
2007-02-20 01:02 | 常财 [未注册用户]

#9楼    回复  引用    

还要指定TP-MMS=0吧?
2007-05-07 23:52 | Mohammed [未注册用户]

#10楼    回复  引用    

我试过了,可以的。
但是每条内容加上这些标志的长度是不能超过CMPP协议限制的。
其它似乎没有什么额外要求了。

效果很不错。
2007-11-23 16:48 | abettor [未注册用户]

#11楼    回复  引用    

我也试了,好像TP-DCS=00时确实不行啊,楼主能否解释下哈
2007-12-24 17:02 | sunwave [未注册用户]

#12楼    回复  引用    

博主总结的很不错,我试了,没问题。
2008-03-20 10:31 | abettor [未注册用户]

#13楼    回复  引用    

设置完全按楼主说的做了。
发英文和数字,长短信可以正常接受。
但发中文的话,就变成乱码了。是不是一定要用哪种编码格式呢?

麻烦大侠们指导下。。。
2008-08-07 17:43 | yux [未注册用户]

#14楼    回复  引用    

的确,老大,我在处理TP-DCS=00 时接收到PDU 后,处理出来的英文超长短信内容也有错误,还请老大多指教。 是否接收到的超长的英文短信要进行移位处理,还是有特定转换算法。 盼指教! 谢谢
2008-10-12 02:28 | 龙民 [未注册用户]




标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2007-05-01 09:04 编辑过
Google站内搜索

China-pub 计算机图书网上专卖店!6.5万品种 2-8折!
近千种 9-95 新二手计算图书火热销售中!
开发者征途系统新作:《设计模式——基于C#的工程化实现及扩展》

相关文章:

相关链接: