cmpp发送超长短信息
来源:互联网 发布:如何理解域名的重要性 编辑:程序博客网 时间:2024/05/06 08:31
cmpp发送超长短信息
注:1、长短信息:是指超过70个汉字,140个字节的信息内容。
最近在做一个某地市公司运营商的GPRS导引项目的时候,运营商要求将对用户的提示短信息(超过140个字节)发送到用户手机,在用户的手机上一次全显示。
上网搜索了一些相关的资料,现在将实现总结如下:
一、CMPP协议相关字段分析(在此只讲发长短信相关的cmpp_submit消息,cmpp的其他内容的请参考《中国移动互联网短信网关接口协议(V3.0.0).doc》
红色部分表示发长短信要更改的字段
洋红色部分表示发长短信可以更改或者不更改的字段
(以下资料参考:http://publishblog.blogdriver.com/zeroliu/1234594.html)
在cmpp协议里,CMPP_SUBMIT消息定义中有相应的参数配置:
TP_udhi :0代表内容体里不含有协议头信息 1代表内容含有协议头信息(长短信,push短信等都是在内容体上含有头内容的)当设置内容体包含协议头,需要根据协议写入相应的信息,长短信协议头有两种:
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
/**
* Copyright 2007 GuangZhou mysrc Co. Ltd.
* All right reserved.
* 功能说明: 长短信测试
* @Author: eric(eric_cheung709@hotmail.com)
* created in 2007/04/28 16:33:06
* @version 1.0
*/
public class CmppLongMessage {
public static void main(final String[] args) {
CmppLongMessage.sendLongMessage();
}
public static int sendLongMessage(){
int retStatus=0;
String message="作者:eric_cheung709@hotmail.com;关于cmpp长短信发送,这是测试文本,将分条下发,在用户手机上一条全显示;如果有问题欢迎email交流联系;下面的是测试代码,可以做为参考;本实现已经通过实际测试,在NOKIA 6680和LG KG90上正常显示";
try{
byte[] messageUCS2;
messageUCS2= message.getBytes("UnicodeBigUnmarked");
System.out.println(message + " -(UCS2)编码: " + bytesToHexStr(messageUCS2));
int messageUCS2Len=messageUCS2.length;//长短信长度
int maxMessageLen=140;
if(messageUCS2Len>maxMessageLen){//长短信发送
int tpUdhi=1;
int msgFmt=0x08;
int messageUCS2Count=messageUCS2Len/(maxMessageLen-6)+1;//长短信分为多少条发送
byte[] tp_udhiHead=new byte[6];
tp_udhiHead[0]=0x05;
tp_udhiHead[1]=0x00;
tp_udhiHead[2]=0x03;
tp_udhiHead[3]=0x0A;
tp_udhiHead[4]=(byte)messageUCS2Count;
tp_udhiHead[5]=0x01;//默认为第一条
for(int i=0;i<messageUCS2Count;i++){
tp_udhiHead[5]=(byte)(i+1);
byte[] msgContent;
if(i!=messageUCS2Count-1){//不为最后一条
msgContent=CmppLongMessage.byteAdd(tp_udhiHead, messageUCS2, i*(maxMessageLen-6), (i+1)*(maxMessageLen-6));
}else{
msgContent=CmppLongMessage.byteAdd(tp_udhiHead, messageUCS2, i*(maxMessageLen-6), messageUCS2Len);
}
- cmpp发送超长短信息
- cmpp发送超长短信息
- cmpp发送超长短信息
- cmpp发送超长短信息
- cmpp发送超长短信息
- cmpp发送超长短信息1
- CMPP协议发送超长短信息
- 短信息错误cmpp以及MISC等等
- 短信息发送
- 短信息发送
- 短信息发送
- Visual C#发送短信息
- tc351i 发送短信息 代码
- PDU格式发送短信息
- smsManager.sendTextMessage() 发送短信息
- Android实现短信息发送
- 基于cmpp协议的超长短信格式
- 基于cmpp协议的超长短信格式
- 内核和用户空间共享内存的实现例程-proc和mmap
- 在分析向此请求提供服务所需资源时出错。请检查下列特定分析错误详细信息并适当地修改源文件。
- (转)C#中判断是否为数字
- 基于tcp/ip协议的网络编程的一点感悟 ---关于ip和port作为通讯一端的唯一标识的认识
- picasa lingoes(灵格斯) 冲突
- cmpp发送超长短信息
- 珍惜时间, 珍惜生命
- jquery表单验证
- 数据结构与算法的重要性
- oracle命令使用
- Oracle多行记录合并 连接/聚合字符串的几种方法
- 基于S3C6410 的windows ce 6.0 DirectDraw使用三缓冲
- 人生课堂
- Linux内核空间与用户空间信息交互方法