public void sendSubmitMessage(CmppSubmit submit) {
MessageRunBean msgBean = MessageRunBean.getInstance();
try {
String message = submit.getMsg_Content();
byte[] msgUCS2 = message.getBytes("UnicodeBigUnmarked");
int msgUCS2Len = msgUCS2.length;// 长短信长度
int maxMsgLen = 140;
int msgLen = maxMsgLen - 6;
if (msgUCS2Len > (msgLen - 12)) {// 长短信发送
submit.setTP_udhi((byte) 0x01);
int msgUCS2Count = msgUCS2Len / msgLen + 1;// 长短信分为多少条发送
int endLen = msgUCS2Len - (msgUCS2Count - 1) * msgLen;
boolean isEnd = endLen > (msgLen - 12) && endLen < msgLen;
if (isEnd) {
msgUCS2Count = msgUCS2Count + 1;
} else {
isEnd = msgUCS2Len % msgLen == 0;
}
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) msgUCS2Count;
tp_udhiHead[5] = 0x01;// 默认为第一条
for (int i = 0; i < msgUCS2Count; i++) {
tp_udhiHead[5] = (byte) (i + 1);
byte[] msgContent;
int start = i * msgLen;
int end = (i + 1) * msgLen;
if (!isEnd) {// 当最后一条的消息长度小于128时(msgLen-12):
// 在最后一条移动会加上‘【金泽物流】’字样,会挤掉一些文字。
if (i != msgUCS2Count - 1) {// 不为最后一条
msgContent = CMPPUtilits.byteAdd(tp_udhiHead,
msgUCS2, start, end);
} else {// 最后一条
msgContent = CMPPUtilits.byteAdd(tp_udhiHead,
msgUCS2, start, msgUCS2Len);
}
} else {// 当最后一条的消息长度大於128时(msgLen - 12),再分解.
if (i != msgUCS2Count - 2 && i != msgUCS2Count - 1) {// 不为最后两条时
msgContent = CMPPUtilits.byteAdd(tp_udhiHead,
msgUCS2, start, end);
} else if (i == msgUCS2Count - 2) {// 倒数第二条时
end = i * msgLen + (msgLen - 12);
msgContent = CMPPUtilits.byteAdd(tp_udhiHead,
msgUCS2, start, end);
} else {
// 最后一条
start = (i - 1) * msgLen + (msgLen - 12);
msgContent = CMPPUtilits.byteAdd(tp_udhiHead,
msgUCS2, start, msgUCS2Len);
}
}
submit.setMsgContent(msgContent);
submit.setMsg_Length((byte) msgContent.length);
submit.setTotal_Length(submit.getSubmitPackLen());
logger.info(isEnd + " tp_udhiHead:" + tp_udhiHead[5]
+ " start:" + start + " end:" + end
+ " end-start+6:" + (end - start + 6) + " MSGLen:"
+ msgContent.length + " totalLen:"
+ submit.getTotal_Length());
sendMsg(submit);
}
} else {
submit.setMsgContent(msgUCS2);
submit.setMsg_Length((byte) msgUCS2Len);
submit.setTotal_Length(submit.getSubmitPackLen());
sendMsg(submit);
}
} catch (Exception e) {
logger.error(e);
msgBean.setException(e);
}
}
分享到:
相关推荐
CMPP(China Mobile Peer-to-Peer)是中国移动通信公司推出的一种基于TCP/IP协议的通信协议,主要用于短信中心(SMSC)与服务提供商(SP)之间的数据传输,支持大规模并发的短消息发送。CMPP测试工具是针对这个协议...
CMPP2,全称为China Mobile Peer-to-Peer Protocol Version 2,是中国移动通信集团制定的一种基于TCP/IP协议的通信协议,主要用于短信中心(SMSC)与短信网关(SP Gateway)之间的数据传输,支持大批量、高并发的...
Java实现CMPP协议是将中国移动通信的CMPP(China Mobile Peer to Peer)协议转化为Java语言进行编程的一种技术。CMPP协议主要用于短信中心(SMSC)与短信网关之间的通信,支持大量并发的短信发送和接收操作,是移动...
支持cmpp2,cmpp3,(smgp*) 支持win/linux环境 自动打印统计信息。 环境: Windows,XP/win7,附带提供库文件; Linux,在CentOS5.X都是没有问题的,不过需要glib2的支持,请确认已经安装,安装命令为“yum -y ...
CMPP2.0协议是中国移动通信集团制定的一种短消息传输协议,主要用于SP(Service Provider)与SCP(Service Control Point)之间的数据交换,支持大规模、高效、稳定地发送和接收短信。在Java环境中实现CMPP2.0协议,...
CMPP协议客户端测试工具是一种专为测试CMPP(China Mobile Peer to Peer)协议设计的应用程序。CMPP协议是中国移动通信公司制定的一种通信协议,主要用于SP(Service Provider)与移动网络之间的数据传输,包括短信...
CMPP3.0(China Mobile Packet Protocol version 3.0)是中国移动通信集团制定的一种用于短信服务的协议,主要用于SP(Service Provider)与MC(Mobile Center)之间的数据传输。这个协议是基于TCP/IP的,旨在提供...
CMPP30模拟网关是一种专门用于短信服务的软件系统,它能够模拟移动通信网络中的CMPP(China Mobile Packet Protocol)3.0协议,帮助开发者和企业在没有真实运营商环境的情况下测试和开发短信应用。CMPP是中国移动...
CMPP(China Mobile Peer to Peer)是中国移动通信集团制定的一种基于TCP/IP协议的通信协议,主要用于短信服务,包括短信发送、接收、查询等操作。在Java中实现CMPP协议,我们需要理解其工作原理,掌握相关的Java...
CMPP协议,全称为China Mobile Peer-to-Peer协议,是中国移动通信公司为了高效、稳定地进行短信业务处理而制定的一种通信协议。这个JAR包包含了实现CMPP协议所需的类库和资源,主要用于与中国移动的短信网关进行交互...
在中国移动的通信网络中,CMPP(China Mobile Packet Protocol)是一种重要的协议,用于连接SP(Service Provider)和服务端,实现高效、稳定的消息传递,包括短信、彩信等。CMPP2.0是CMPP协议的一个版本,它在CMPP...
4. **消息处理**:定义消息处理器,处理接收到的各种CMPP消息,如CMPP_SUBMIT(短信提交)、CMPP_DELIVER(短信接收)等,根据业务逻辑做出响应。 5. **异常处理**:设置合适的错误处理机制,如超时重试、错误恢复...
CMPP3.0移动短信网关C#源代码是一套用于构建短信服务系统的软件开发资源,它基于中国移动的通信协议CMPP(China Mobile Packet Protocol)版本3.0。该源代码实现了CMPP协议的上行和下行指令,使得开发者能够方便地在...
CMPP2.0协议是中国移动通信集团制定的一种用于短信服务的传输协议,它主要用于SP(Service Provider)和服务提供商之间的数据交换。在这个Java源码实现的示例中,我们将深入探讨如何利用Java语言来构建和解析CMPP2.0...
《CMPP客户端:深入解析与应用》 在IT行业中,通信协议是确保设备间有效数据传输的关键。在短信服务领域,三大运营商中国移动、中国联通和中国电信分别采用不同的协议进行短信发送和接收,即CMPP(China Mobile ...
Java实现CMPP协议开发代码主要涉及的是中国移动通信的CMPP(China Mobile Packet Protocol)协议,该协议主要用于短信中心(SMSC)与短信网关(SP)之间的数据传输,包括发送短消息、接收短消息以及相关的控制功能。...
CMPP(China Mobile Peer-to-Peer)协议是中国移动通信公司为SP(Service Provider)提供的一种基于TCP/IP协议的通信协议,用于实现SP与移动运营商之间的数据传输,主要包括短信、彩信、WAP Push等业务。C#是微软...
它定义了多种消息类型,如提交短信(CMPP_SUBMIT)、查询短信状态(CMPP_QUERY)和接收短信(CMPP_DELIVER)等,覆盖了短信服务的全生命周期。CMPP协议具有高吞吐量、低延迟的特点,适合大量短信的并发处理。 在...
CMPP(China Mobile Peer-to-Peer)是一种由中国移动制定的通信协议,主要用于SP(Service Provider)与MC(Mobile Center)之间的短信、彩信等业务的数据传输。CMPP3.0是该协议的一个版本,它在CMPP2.0的基础上进行...
CMPP2.0短信网关发送短信代码是Java开发者用于与中国移动通信集团的短信服务进行交互的一种技术实现。CMPP(China Mobile Short Message Peer-to-Peer)2.0协议是移动运营商提供的一种通信协议,主要用于短信业务的...