//当短信超过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
超长短信:短信内容超过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来说,长短信上行,按照协议反过来解析:
1byte[] contentBytes = msg.getMsgContent();
2int headLen = contentBytes[0]; // 内容头的长度
3// 超长短信总条数
4int pk_total = contentBytes[headLen - 1];
5// 超长短信第几条
6int pk_num = contentBytes[headLen];
7// 超长短信序号
8byte 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条长短信。
分享到:
相关推荐
CMPP协议主要用于短信中心(SMSC)与短信网关之间的通信,支持大量并发的短信发送和接收操作,是移动运营商内部的重要通信协议。本文将详细介绍Java实现CMPP协议的相关知识点。 首先,CMPP协议主要由一系列的命令...
而"cmpp3"标签则明确指出了该源码与CMPP3.0协议的紧密关系,开发者可以借此深入了解如何使用CMPP协议进行实际的短信业务开发。 【压缩包子文件的文件名称列表】揭示了项目的基本结构: 1. `.depend`:通常是一个...
CMPP2.0短信网关发送短信代码...综上所述,基于Java实现的CMPP2.0短信网关发送短信代码是一项涉及网络通信、协议解析、多线程编程等多方面技术的工作,需要开发者对移动通信协议有深入理解,并具备扎实的Java编程基础。
1. **CMPP协议**:CMPP协议是中国移动制定的一套基于TCP/IP的通信协议,用于SP(Service Provider)与MC(Mobile Center)之间进行数据交互。协议主要包括CMPP_SUBMIT(发送短信)、CMPP_DELIVER(接收短信)、CMPP_...
华为CMPP协议短信网关Delphi源码是一个用于实现与华为短信网关通信的应用程序,主要涉及网络通信类技术。CMPP(China Mobile Protocol for Short Message Peer-to-Peer)是中国移动制定的一种短消息协议,旨在高效、...
这个协议是基于TCP/IP的,旨在提供高效、稳定、安全的短信发送服务。CMPP3.0相对于之前的版本,如CMPP2.0,在功能、性能和安全性上都有所增强,更加适应大规模、高并发的短信业务需求。 CMPP3.0协议主要包括以下几...
3. **消息编码与解码**:CMPP协议的数据交换采用二进制格式,开发者需要熟悉十六进制转换,并能正确地将业务数据编码成符合协议规定的格式,同时也要能解析接收到的二进制数据。 4. **上行与下行短信处理**:上行...
CMPP协议是基于TCP/IP协议的,主要用于短信中心(SMSC)与业务系统之间的数据传输。它定义了多种消息类型,如提交短信(CMPP_SUBMIT)、查询短信状态(CMPP_QUERY)和接收短信(CMPP_DELIVER)等,覆盖了短信服务的...
5. **协议栈**:CMPP协议基于TCP/IP协议栈,利用TCP的面向连接特性保证数据传输的完整性。 6. **通信方式**: - **长连接**:SP与SGW之间通常保持长期连接,以提高处理效率,减少连接建立与断开的开销。 - **短...
总而言之,基于CMPP协议的银行短信系统设计和实现是一项复杂的工程任务,需要综合多种技术手段,确保短信业务的稳定、安全和高效。通过对系统结构和功能的合理划分,接口程序和短信业务模块的精心设计,以及具体解决...
2. **消息封装与解析**:根据CMPP协议规范,将短信内容封装成符合协议格式的报文,同时实现接收端的报文解析。 3. **事务处理**:正确处理事务,确保消息发送与接收的顺序和完整性。 4. **错误处理与重试机制**:当...
在这个项目中,我们使用了C语言来实现一个基于中国移动CMPP3协议的短信网关。CMPP(China Mobile Peer to Peer)是中国移动为SP(Service Provider)提供的一个标准化接口,主要用于实现SP与移动运营商之间的数据...
在JAVA环境下,开发基于CMPP3.0协议的应用,主要是为了实现与移动短信网关的通信,进行短信的发送、接收等操作。下面将详细介绍这个协议及其在JAVA开发中的应用。 CMPP(China Mobile Peer to Peer)协议是中国移动...
CMPP协议定义了多种消息类型,如CMPP_SUBMIT(提交短信)、CMPP_DELIVER(接收短信)、CMPP_QUERY(查询短信状态)等,需要根据业务需求实现对应的消息处理函数。 10. **状态报告** CMPP协议支持状态报告功能,当...
1. **CMPP协议概述**:CMPP协议是基于TCP/IP协议栈构建的,主要应用于SP和移动运营商之间,用于发送、接收、查询和取消短信服务。协议设计目标包括高并发处理能力、低延迟以及可靠的数据传输。 2. **CMPP协议结构**...
一、CMPP协议概述 CMPP全称为“中国移动点对点短消息网关协议”,是一种基于TCP/IP的通信协议,用于连接SP(Service Provider)与SCP(Service Control Point)之间的数据交换,主要处理短信的发送、接收、状态查询...
CMPP协议中定义了一系列的消息格式,如CMPP_SUBMIT(提交短信)、CMPP_DELIVER(接收短信)、CMPP_ACTIVE_TEST(活动检测)等,每种消息都有特定的命令ID和消息结构。 以上是对CMPP协议开发的详细介绍,涵盖了协议...