一、关键代码:
private synchronized void sendSMS(List list, String isDone)throws Exception{
for(int i=0;i<list.size();i++){
String[] oneSMS = (String[])list.get(i);
if(oneSMS.length == 3){
String rcvMobile[] = new String[1];
rcvMobile[0] = oneSMS[1];
String sm = oneSMS[2].trim();
int returnInt = -1;
if(sm.length()<=70){
returnInt = send(getShortSubmitMessage(sm.getBytes("UnicodeBigUnmarked"), rcvMobile));
}else{
returnInt = sendLongMessage(rcvMobile, sm); //发送长短信
}
if(returnInt==0){
database.updateSMS(oneSMS[0],String.valueOf(returnInt),"1");
}else{
database.updateSMS(oneSMS[0],String.valueOf(returnInt),isDone);
}
}
}
}
public int send(CMPPSubmitMessage msg) {
int returnInt=11;
if(msg == null)
returnInt= 10;
CMPPSubmitRepMessage reportMsg = null;
try {
reportMsg = (CMPPSubmitRepMessage)super.send(msg);
returnInt=reportMsg.getResult();
} catch(IOException ex) {
System.err.println(ex.toString());
ex.printStackTrace();
returnInt=11;
}
return returnInt;
}private int sendLongMessage(String[] mobiles, String contentMessage){
int result = 0;
try{
List msgList = divideMessage(contentMessage);
int msgCount = msgList.size();
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)msgCount;
tp_udhiHead[5]=0x01;
for(int i=0;i<msgCount;i++){
String msg = (String)msgList.get(i);
tp_udhiHead[5]=(byte)(i+1);
byte[] msgContent = byteAdd(tp_udhiHead, msg.getBytes("UnicodeBigUnmarked"));
CMPPSubmitMessage cmppSubmitMessage = new CMPPSubmitMessage(
msgCount,
(i+1),
registered_Delivery,
msg_Level,
service_Id,
fee_UserType,
fee_Terminal_Id,
tp_Pid,
1,
8,
msg_Src,
fee_Type,
fee_Code,
new Date(System.currentTimeMillis() + (long)0xa4cb800),
null,
src_Terminal_Id,
mobiles,
msgContent,
"");
result += send(cmppSubmitMessage);
}
}catch (Exception e){
result=-1;
e.printStackTrace();
}
return result;
}
private static List divideMessage(String msg){
int maxLen = 67;
List msgList = new ArrayList();
while(msg.length()>maxLen){
msgList.add(msg.subSequence(0, maxLen));
msg = msg.substring(maxLen);
}
msgList.add(msg);
return msgList;
}
private static byte[] byteAdd(byte[] src, byte[] add){
byte[] dst = new byte[src.length+add.length];
for(int i=0;i<src.length;i++){
dst[i]=src[i];
}
for(int i=0;i<add.length;i++){
dst[src.length+i]=add[i];
}
return dst;
}