基于cmpp协议的超长短信格式

 
//当短信超过70个汉字时短信的第一部分
E0 00 00 00               //4byte 数据总长度
05 00 00 00               //4byte 命令号
3F 38 0B 01               //4byte 流水号
31 3B 6E 0B A2 84 61 F0   //8byte msg_id
30 35 37 37 35 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  //21byte Dest_Id
00 00 00 00 00 00 00 00 00 00  //10byte  Service_Id
00                        //1byte TP_pid
01                        //1byte TP_udhi
08                        //1byte Msg_Fmt
38 36 31 33 37 35 30 32 34 33 33 30 33 00 00 00 00 00 00 00 00  //21byte Src_terminal_Id
00                        //Registered_Delivery
8B                        //Msg_Length

06 08 04 00 2A    //06表示短信正文内容从6+2的位置开始读取
02                        //超长短信总条数
01                        //序号
00 61 00 61 00 61 00 61 00 61 00 61 00 61 00 61 00 61 00 61 4E 00 4E 2A 4E BA 6C 11 4E 3B 4E 49 52 A1 5B 9E 57 28 8F D9 4E 2A 4E BA 6C 11 4E 3B 4E 49 52 A1 5B 9E 57 28 8F D9 4E 2A 4E BA 6C 11 4E 3B 4E 49 52 A1 5B 9E 57 28 8F D9 4E 2A 4E BA 6C 11 4E 3B 4E 49 52 A1 5B 9E 57 28 8F D9 4E 2A 4E BA 6C 11 4E 3B 4E 49 52 A1 5B 9E 57 28 8F D9 4E 2A 4E BA 6C 11 4E 3B 00 61 00 61 00 61 00 61 00 61 00 61  //短信内容
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00   //8byte Reserved


//当短信超过70个汉字时短信的第二部分
78 00 00 00
05 00 00 00
49 38 0B 01
31 3B 74 8B A2 84 62 0D
30 35 37 37 35 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00
00
01
08
38 36 31 33 37 35 30 32 34 33 33 30 33 00 00 00 00 00 00 00 00
00
23

06 08 04 00 2A   //06表示短信正文内容从6+2的位置开始读取
02                       //超长短信总条数
02                       //序号
00 61 00 61 00 61 00 61 00 62 00 62 00 62 00 62 00 62 00 62 00 62 00 62 00 62 00 62  //短信内容
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 //8byte Reserved
【虎.无名】我测试了2个超长短信,前者是121个中文UTF-16BE,后者是170个ASCII字符,使用Nokia6630发送,在服务上接收到的短信内容部分如下:
.------------------------------
Msg1[ 140B] = :05:00:03:0A:02:01:00:31:00:38:00:36:00:30:00:2A:00:23:00:39:00:32:00:37:00:30:00:32:00:36:00:38:00:39:00:23:00:20:5E:02:51:6C:5B:89:5C:40:95:E8:53:E3:8F:B9:FF:0C:62:37:8B:C1:7A:97:53:E3:52:9E:74:06:FF:0C:4E:00:54:68:30:02:5F:C3:75:35:56:FE:FF:1A:4E:07:72:3D:52:9B:74:F6:88:C5:00:A5:00:34:00:35:00:2F:00:33:00:30:7C:92:FF:0C:5F:C6:8F:9B:00:28:66:5A:00:29:00:A5:00:36:00:7E:00:38:00:2F:00:31:00:30:7C:92:30:02:4E:BA:62:4D
Msg2[ 114B] = :05:00:03:0A:02:02:FF:0C:94:C1:8D:EF:68:65:FF:0C:4E:94:91:CC:72:4C:FF:0C:4E:09:6E:58:7A:D9:FF:0C:8D:EF:53:57:FF:0C:54:1B:51:EF:5B:BE:99:86:30:02:70:6B:8F:66:7A:D9:00:32:00:30:00:32:8D:EF:8F:66:53:BB:51:6C:5B:89:5C:40:30:02:73:ED:8F:66:4E:0B:53:48:51:6D:70:B9:53:41:52:06:30:02:9F:50:77:09:53:D1:FF:0C:51:49:58:4C:58:4C:30:02:67:68:5A:07:30:02
Head[6B] = 0x0500030A0201 【总共2条的第一条】
Body[ 67C] = 1860*#92702689# 市公安局门口边,户证窗口办理,一周。心电图:万爽力瓶装?45/30粒,忆辛(晚)?6~8/10粒。人才
Head[6B] = 0x0500030A0202
Body[ 54C] = ,铁路桥,五里牌,三湘站,路南,君凯宾馆。火车站202路车去公安局。班车下午六点十分。齐眉发,光塌塌。杨娇。
TOTAL[ 121C] = 1860*#92702689# 市公安局门口边,户证窗口办理,一周。心电图:万爽力瓶装?45/30粒,忆辛(晚)?6~8/10粒。人才,铁路桥,五里牌,三湘站,路南,君凯宾馆。火车站202路车去公安局。班车下午六点十分。齐眉发,光塌塌。杨娇。
.------------------------------
Msg1[ 159B] = :82:40:9D:20:24:9C:31:32:33:34:35:36:37:38:39:30:31:32:33:34:35:36:37:38:39:30:31:32:33:34:35:36:37:38:39:30:31:32:33:34:35:36:37:38:39:30:31:32:33:34:35:36:37:38:39:30:31:32:33:34:35:36:37:38:39:30:31:32:33:34:35:36:37:38:39:30:31:32:33:34:35:36:37:38:39:30:31:32:33:34:35:36:37:38:39:30:31:32:33:34:35:36:37:38:39:30:31:32:33:34:35:36:37:38:39:30:31:32:33:34:35:36:37:38:39:30:31:32:33:34:35:36:37:38:39:30:31:32:33:34:35:36:37:38:39:30:31:32:33:34:35:36:37:38:39:30:31:32:33
Msg2[ 23B] = :82:40:9D:20:24:24:34:35:36:37:38:39:30:31:32:33:34:35:36:37:38:39:30
Head[6B] = 0x82409D20249C 【???看不懂呀???】
Body[ 153C] = 123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123
Head[6B] = 0x82409D202424
Body[ 17C] = 45678901234567890
TOTAL[ 170C] = 12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
参考: http://www.learnsky.com/bbs/printpage.asp?BoardID=6&ID=31
参考: http://www.blogjava.net/bubaishui/articles/58214.html
超长短信:短信内容超过70个汉字,提交给网关时候需要分成多条,但是用户手机接收时候是一条(sp角度,手机发送长短信概念一样)。

  在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        

            到此,长短信的发送设置基本完成,但是有一点要注意:Src_Id 协议里这个字段在一条长短信中必须要一样,不然手机会解析成三条,   
      并三条都 是错误短信。
    
            对于sp来说,长短信上行,按照协议反过来解析:
                      
1 byte [] contentBytes  =  msg.getMsgContent();
2 int  headLen  =  contentBytes[ 0 ];  //  内容头的长度
3 //  超长短信总条数
4 int  pk_total  =  contentBytes[headLen  -   1 ];
5 //  超长短信第几条
6 int  pk_num  =  contentBytes[headLen]; 
7 //  超长短信序号
8 byte  serial  =  contentBytes[headLen  -   2 ]; 

   http://jobs.cnblogs.com/AddToFavorite.aspx?id=445584

【虎.无名】折腾了2天,周一是移动研究院的防火墙坏了,到下午才好;但后来mo/mt一直失败,后来发现,不管我在登录报文的version中怎么填写,其响应返回的version=48,也就是0x30,所以怀疑他们给我的是cmpp3.0的短信网关,找了一圈,周二下午1点半他们才配好,2点半测完,真是折腾人。对于Cmpp长短信,简单说,就是cmpp字段的pk_total和pk_number需要设置,另外udhi需要设置为1,如果采用6字节的udhi,则把短信内容按134字节来分割,在头部添加6字节udhi,刚好140字节。(这是一个边界点,有些cmpp服务器,必须小于140字节,等于也不行,你得自己试)。另外需要注意的是:UDHI头的后面三个字节,第一是顺序号,确保不重复就行,其他两个字节,和pk_total/pk_num一致;此外;这几条短信的seq_num也要一致。我用Nokia6630接收正常,手机会自动拼接成1条长短信。

你可能感兴趣的:(防火墙,asp.net,asp,bbs)