MAS_长短信

使用移动代理服务器发送长短信
(使用软件包jtp.jar
软件的名称:MAS2.0
软件开发者:神州数码思特奇信息技术股份有限公司
)

问题描述:
按照demo写出发短信程序无问题,
短信内容超过70汉字,发送后服务器无发送成功响应。短信接收不到。

解决过程:
查阅资料,网上大多数在讲CMPP协议,加协议头,拆分。=没有效果。

经过对jar源码的反编译,发现此段代码:


public static String sendSMS(SUBMIT mt)
{
SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmss");
int containCount = Integer.parseInt(config.getDefault_poolNum());
if(powerFlag.getConnFlag() == 1)
{
logger.error("connection was not prepared!");
return "2";
}
if(!judgeFluxSms.judge())
{
logger.error("the flux was over stander!");
return "3";
}
if("".equals(mt.getServiceID()) || "0".equals(mt.getServiceID()))
mt.setServiceID(config.getINTERSERVICEID());
String msgContent = mt.getMsgContent();
boolean acsiiFlag = isPureAscii(msgContent);
int msgLength1 = mt.getMsgContent().length();
int msgLength = 0;
try
{
msgLength = mt.getMsgContent().getBytes("gbk").length;
}
catch(UnsupportedEncodingException e1)
{
logger.error(e1);
}
mt.head.setSeqno(getSequence1());
String sendId = (new StringBuilder(String.valueOf(df.format(new Date())))).append((new Integer(mt.head.getSeqno())).toString()).toString();
mt.setSendId(sendId);
int normalSmsLen = Integer.parseInt(config.getNormalSmsLen());
String nullStr = " ";
if(msgLength1 > normalSmsLen && msgLength1 < 67)
{
mt.setMsgContent((new StringBuilder(String.valueOf(mt.getMsgContent()))).append(nullStr.substring(0, (67 - msgLength1) + 1)).toString());
msgContent = (new StringBuilder(String.valueOf(mt.getMsgContent()))).append(nullStr.substring(0, (67 - msgLength1) + 1)).toString();
msgLength1 = mt.getMsgContent().length();
try
{
msgLength = mt.getMsgContent().getBytes("gbk").length;
}
catch(UnsupportedEncodingException e1)
{
logger.error(e1);
}
}
if(msgLength1 <= normalSmsLen)
{
mt.head.commandid = 3;
mt.setMessageType(0);
mt.setMsgLength((byte)msgLength);
mt.setPkTotal((byte)1);
mt.setPkNumber((byte)1);
mt.setDestType((byte)0);
mt.setFeeTerminalType((byte)0);
mt.setFeeUserType((byte)0);
mt.setFeeTerminalID(mt.getDestID());
if(acsiiFlag)
mt.setMsgFmt((byte)0);
else
mt.setMsgFmt((byte)15);
if(smsPool.getSubmitSize() < containCount && smsPool.getSubmitSavePoolSize() < containCount)
{
smsPool.addSUBMIT(mt);
return mt.getSendId();
} else
{
logger.error("the SubmitPool was full.");
return "1";
}
}
int configLen = Integer.parseInt(config.getLongSms_Len());
if(msgLength1 < configLen)
{
int total = msgLength1 / 67;
if(msgLength1 % 67 != 0)
total++;
String msgStr[] = new String[total];
for(int i = 0; i < total; i++)
{
int contentLength = i != total - 1 ? 67 : msgLength1 - i * 67;
msgStr[i] = msgContent.substring(i * 67, i * 67 + contentLength);
}

lSmsFlag++;
if(lSmsFlag == 99)
lSmsFlag = 0;
for(int i = 0; i < total; i++)
{
SUBMIT smt = new SUBMIT();
smt.setFlag("1");
smt.setSrcID(mt.getSrcID());
smt.setDestID(mt.getDestID());
smt.setFeeType(mt.getFeeType());
smt.setFeeCode(mt.getFeeCode());
smt.setLinkID(mt.getLinkID());
if(acsiiFlag)
mt.setMsgFmt((byte)0);
else
smt.setMsgFmt((byte)8);
smt.setServiceID(mt.getServiceID());
smt.head.commandid = 3;
smt.setMessageType(0);
smt.setPkTotal((byte)total);
smt.setPkNumber((byte)(i + 1));
byte msgHead[] = new byte[6];
msgHead[0] = 5;
msgHead[1] = 0;
msgHead[2] = 3;
msgHead[3] = (byte)lSmsFlag;
msgHead[4] = (byte)total;
msgHead[5] = (byte)(i + 1);
smt.setLongmsgHead(msgHead);
smt.setMsgContent(msgStr[i]);
smt.setMsgLength((byte)(msgStr[i].length() * 2 + 6));
smt.setDestType((byte)0);
smt.setFeeTerminalType((byte)0);
smt.setFeeUserType((byte)0);
smt.setFeeTerminalID(mt.getDestID());
if(smsPool.getSubmitSize() > containCount || smsPool.getSubmitSavePoolSize() > containCount)
return "1";
smt.head.setSeqno(getSequence1());
smt.setSendId(mt.getSendId());
smsPool.addSUBMIT(smt);
}

} else
{
return "4";
}
return mt.getSendId();
}


说明在提供的封装程序中已经包含对是否是长短信的支持,只要在对应配置文件中加上或者更改
normalSmsLen的值即可
我参考源码给的值是70,
经过测试可以正常发送长短信。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值