东软SMIAS短信接入Java开发

该博客展示了用Java实现短信API的代码。包含导入必要类、配置日志、处理参数、连接服务器、登录、发送短信、读取响应和登出等操作,同时对登录、发送、登出等过程中可能出现的异常进行了处理,还给出了Log4j的配置信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package org.crabo.blog;

import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
import com.commerceware.cmpp.CMPP;
import com.commerceware.cmpp.cmppe_deliver_result;
import com.commerceware.cmpp.cmppe_result;
import com.commerceware.cmpp.cmppe_submit;
import com.commerceware.cmpp.conn_desc;

public class SMSAPI {
 static Logger log;
 static cmppe_result result;
 static CMPP cmpp;
 static conn_desc connDesc;
 /** ExitCode:
  * @1: Login failed
  * @2: Submit failed
  * @3: Response failed
  * @4: Logout failed
  * @5: Bad Parameter
  */
 public static void main(String[] args) {
  String dst = "";
  String mess = "";
  
  String ip = "*.*.*.*";
  int    port = ***;
  String loginID = "*****";
  String password = "******";
  String userID = "*******";
  String icpID = "*******";
  String svcType = "********";
  
  if(args.length == 2)
  {
   dst = args[0];
   mess = args[1];
  }
  else if(args.length == 9)
   {
    dst = args[0];
    mess = args[1];
    
    ip = args[2];
    port = Integer.parseInt(args[3]);
    loginID = args[4];
    userID = args[5]+"/0";
    password = args[6];
    icpID = args[7]+"/0";
    svcType = args[8]+"/0";
   }
   else
    System.exit(5);
  ////////////////////////////////////////////////////////
  log = Logger.getLogger(SMSAPI.class);
  PropertyConfigurator.configure("log4j.properties");//调用配置文件
  result = null;
  cmpp = new CMPP();
  connDesc = new conn_desc();
  ////////////////////////////////////////////////////////
  //截取多个联系人
  String[] dstArray = dst.split(";");
  //计算消息截取段数  :56/70 = 0 => messPart=messPart=1
  int messLen  = mess.length();
  int messPart = messLen/70 +1;
  String[] messArray = new String[messPart];
  for(int i=0;i<messPart;i++)
  {
   messArray[i] = mess.substring(70*i,(70*(i+1)<messLen?70*(i+1):messLen))+"/0";
  }
  ////////////////////////////////////////////////////////  
  log.info("开始运行... ");
  try{
   cmpp.cmpp_connect_to_ismg(ip, port, connDesc);
   log.info("连接完毕!");
   cmpp.cmpp_login(connDesc, loginID, password, (byte)2, 0x12, (int)System.currentTimeMillis());      
   
   result = cmpp.readResPack(connDesc);
   if (result.stat != CMPP.CMPPE_RSP_SUCCESS)
    throw new Exception("状态错误,stat "+ result.stat);
   else
    log.info("登录成功! ");
  }catch(Exception e){
   log.error("登录失败 " + e);
   System.exit(1);
  }
  ////////////////////////////////////////////////////////  
  log.info("开始发送... ");
  try{
   cmppe_submit submitStruct = new cmppe_submit();
   submitStruct.set_svctype(svcType.getBytes());
   submitStruct.set_srcaddr(userID.getBytes());
   submitStruct.set_ducount((byte)1);
   submitStruct.set_msgmode((byte)1);
   submitStruct.set_icpid(icpID.getBytes());
   //submitStruct.set_feetype((byte)1);
   //submitStruct.set_infofee(300);
   byte[][] dstByte= {{0,0},{0,0}};
   byte[] message;
   for(int i=0;i<dstArray.length;i++) //逐个联系人
   {
    dstArray[i] += "/0"; //每个号码必须以byte 0结尾
    dstByte[0] = dstArray[i].getBytes();
    submitStruct.set_dstaddr(dstByte);
    for(int j=0;j<messArray.length;j++) //逐条消息(70个字分组)
    {
     message = messArray[j].getBytes();
     submitStruct.set_msg((byte)15, message.length, message);
     cmpp.cmpp_submit(connDesc, submitStruct);
     ReadResponse();//Submit
     ReadResponse();//Deliver
    }
   }
  }catch(Exception e){
   log.error("发送异常 "+ e);
   System.exit(2);
  }
  ////////////////////////////////////////////////////////
  log.info("登出 ");
  try{
   cmpp.cmpp_logout(connDesc);
  }catch(Exception e)
  {
   log.error("登出异常 "+ e);
   System.exit(4);
  }
 }

 private static void ReadResponse()
 {
  try{
   result= cmpp.readResPack(connDesc);
   switch(result.pack_id){
    case CMPP.CMPPE_NACK_RESP:
     log.info("Get Nack Pack");
     break; 
    case CMPP.CMPPE_SUBMIT_RESP:
     if(result.stat==0)
      log.info("Get Sumit Resp. stat = " + result.stat);
     else
      log.error("Get Sumit Resp. stat = " + result.stat);
     break;  
    case CMPP.CMPPE_DELIVER:
     cmppe_deliver_result deliverResult = (cmppe_deliver_result)result;
     log.info("Get Deliver. stat = " + deliverResult.stat);
     if(deliverResult.stat != 0)
     {
      log.info("Deliver Status  Rpt " + deliverResult.status_rpt);     
      log.info("Deliver Src " + new String(deliverResult.src_addr));
      log.info("Deliver Dst " + new String(deliverResult.dst_addr));
      //log.info("Deliver Message "+ new String(deliverResult.short_msg,"GB2312"));
     }
     cmpp.cmpp_send_deliver_resp(connDesc, deliverResult.seq, deliverResult.stat);
     break; 
    default:
     break;
    }
  }catch(Exception e){
   log.error("ReadResponse异常 " + e);
   System.exit(3);
  }
 }

}

=======================================

Log4j.Propertyis

=======================================

log4j.rootLogger=INFO, rfile

# log4j Ver 1.2.11
# stdout is set to be a ConsoleAppender.
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-M-d HH:mm:ss} %C %M %n%p: %m%n

# stdout is set to be a RollingFileAppender.
log4j.appender.rfile=org.apache.log4j.RollingFileAppender
log4j.appender.rfile.File=./SMS_log.txt
log4j.appender.rfile.MaxFileSize=100KB
log4j.appender.rfile.MaxBackupIndex=5
log4j.appender.rfile.layout=org.apache.log4j.PatternLayout
log4j.appender.rfile.layout.ConversionPattern=%d{yyyy-M-d HH:mm:ss} %C %M %n%p: %m%n

# default levels
log4j.logger.SMSAPI=ALL

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值