cmpp2 长短信submit包发送失败 错误代码是:4 消息长度错
cmpp2 长短信submit包发送失败 错误代码是:4 消息长度错
下面是我发送长短信的代码,在短信内容头部加上了6个字节的数组,我下发内容共两条短信,但是两条下发后都是返回错误代码4,麻烦各位大侠帮忙看下这是什么原因造成的了,非常感谢!
public synchronized String submitLongMsg(long msg_id, byte pk_total,
byte pk_number, byte registered_Delivery, byte msg_level,
String service_Id, byte fee_UserType, String fee_terminal_Id,
byte fee_terminal_type, byte tP_pId, byte tP_udhi, byte msg_Fmt,
String msg_src, String feeType, String feeCode, String src_Id,
byte destUsr_tl, String dest_terminal_Id, byte dest_terminal_type,
String msg_Content, String linkid, int sq_id) throws Exception {
byte[] messageUCS2 = msg_Content.getBytes("UnicodeBigUnmarked");
System.out.println(msg_Content + " -(UCS2)编码: " + bytesToHexStr(messageUCS2));
int messageUCS2Len = messageUCS2.length;
System.out.println("发送长短信:messageUCS2Len=" + messageUCS2Len);
int maxMessageLen = 140;
int messageUCS2Count = messageUCS2Len / (maxMessageLen - 6) + 1;
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) messageUCS2Count;
tp_udhiHead[5] = 0x01;
for (int i = 0; i < messageUCS2Count; i++) {
tp_udhiHead[5] = (byte) (i + 1);
byte[] msgContent;
if (i != messageUCS2Count - 1)
msgContent = byteAdd(tp_udhiHead, messageUCS2, i
* (maxMessageLen - 6), (i + 1) * (maxMessageLen - 6));
else {
msgContent = byteAdd(tp_udhiHead, messageUCS2, i
* (maxMessageLen - 6), messageUCS2Len);
}
System.out.println("第" + i + "条短信的长度:" + msgContent.length);
System.out.println("UCS2:" + bytesToHexStr(msgContent));
int len = 159 + msgContent.length;
this.dous.writeInt(len);
this.dous.writeInt(4);
this.dous.writeInt(sq_id);
this.dous.writeLong(msg_id);
this.dous.writeByte(tp_udhiHead[4]);
this.dous.writeByte(tp_udhiHead[5]);
this.dous.writeByte(registered_Delivery);
this.dous.writeByte(msg_level);
Utils.writeString(this.dous, service_Id, 10);
this.dous.writeByte(fee_UserType);
Utils.writeString(this.dous, fee_terminal_Id, 21);
this.dous.writeByte(tP_pId);
this.dous.writeByte((byte)1);
this.dous.writeByte((byte)8);
Utils.writeString(this.dous, msg_src, 6);
Utils.writeString(this.dous, feeType, 2);
Utils.writeString(this.dous, feeCode, 6);
Utils.writeString(this.dous, "", 17);
Utils.writeString(this.dous, "", 17);
Utils.writeString(this.dous, src_Id, 21);
this.dous.writeByte(destUsr_tl);
Utils.writeString(this.dous, dest_terminal_Id, 21);
this.dous.writeByte(msgContent.length);
this.dous.write(msgContent);
Utils.writeString(this.dous, "", 8);
this.dous.flush();
}
return "1223,0";
}
public static byte[] byteAdd(byte[] src,byte[] add,int start,int end){
byte[] dst=new byte[src.length+end-start];
for(int i=0;i<src.length;i++){
dst[i]=src[i];
}
for(int i=0;i<end-start;i++){
dst[src.length+i]=add[start+i];
}
return dst;
}
private static String bytesToHexStr(byte[] b) {
if (b == null)
return "";
StringBuffer strBuffer = new StringBuffer(b.length * 3);
for (int i = 0; i < b.length; i++ ) {
strBuffer.append(Integer.toHexString(b[i] & 0xff));
strBuffer.append(" ");
}
return strBuffer.toString();
}