日期:2014-05-20  浏览次数:20867 次

求助 java 如何连 cmpp 2.0 (中国移动的网关协议) 的问题
代码如下:
public void smsDemo(String content, String phone) throws IOException {
Args smsArgs = new Cfg("config.xml", false).getArgs("ismg");
smsArgs.set("source-addr", "XXXX");
smsArgs.set("shared-secret", "XXXX");
smsArgs.set("port", 7890);
smsArgs.set("host", "XXXXXX");
smsArgs.set("heartbeat-interval", 10);
smsArgs.set("reconnect-interval", 30);
smsArgs.set("heartbeat-noresponseout", 5);
smsArgs.set("transaction-timeout", 20);
smsArgs.set("version", 1);
smsArgs.set("debug", false); 
CMPPSMProxy cmppSmProxy = new CMPPSMProxy(smsArgs);
String[] rcvMobile = phone.split(",");

CMPPSubmitMessage submitMsg = new CMPPSubmitMessage(1, // 相同Msg_id消息的总条数
1, // 相同Msg_id的消息序号
1, // 需要状态报告
1, // 信息类别
"websms", // 业务类型,应与Infox对应
1, // 计费用户类型,0:对目的终端MSISDN计费,1:对源终端MSISDN计费,2:对SP计费,3:本字段无效
"", // 被计费用户的号码(因是对主叫计费,所以此段填写了空)
0, // GSM协议类型
0, // GSM协议类型
1, // 信息的CMPP格式类型: 0: ASCII格式, 1: UCS2格式
"websms", // 信息内容来源,对应于登录Infox的帐号
"02", // 资费类别,“短消息类型”为“发送”,对“计费用户号码”不计信息费,此类话单仅用于核减SP对称的信道费
"10", // 资费代码,以分为单位
new java.util.Date(System.currentTimeMillis() + 2 * 24 * 60
* 60 * 1000), // 存活有效期,当前时间+2天
new java.util.Date(System.currentTimeMillis()), // 定时发送时间(null:立即发送)
"8888", // 源终端MSISDN号码(为SP的服务代码或前缀, 为服务代码的长号码,
// 网关将该号码完整的填到SMPP协议相应的destination_address字段,
// 该号码最终在用户手机上显示为短消息的主叫号码) (没有可以为空)
rcvMobile, // 接收业务的MSISDN号码(数组)
content.getBytes("utf-8"), "");
CMPPSubmitRepMessage rep = (CMPPSubmitRepMessage) cmppSmProxy
.send(submitMsg);
if (rep != null) {
prlint(phone + ":发送结果smsDemo: " + rep.getResult()
+ ",rep.getSequenceId():" + rep.getSequenceId()
+ ",rep.getMsgId():" + rep.getMsgId()
+ ",rep.getCommandId():" + rep.getCommandId()
+ new Timestamp(System.currentTimeMillis()));
}
cmppSmProxy.close();
System.out.println("执行完毕smsDemo:" + rep);
}

source-addr,shared-secret 都是正确的 host 也是正常的端口,发送短信后为什么CMPPSubmitRepMessage 值一直是NULL,有经验的朋友说说这是什么原因呢?

------解决方案--------------------
路过帮顶...