| 
         
     
     | 
     | 
    
  
    | 
    基于CMPP2以及东软API的短信平台的开发 | 
   
  
     | 
   
  
     | 
   
  
    | 
     作者:未知  来源:月光软件站  加入时间:2005-2-28 月光软件站  | 
   
  
    基于CMPP2以及东软API的短信平台的开发  10MS发表于www.10ms.net 
  本平台针对网关开发。  东软API不知道是什么版本的,源代码出现某个错误,某数组允许长度64,API文档里也说明是64,可是它 
  是65。破解之,改之,重新编译之,无问题。  API文档里示例程序也有若干错误,很奇怪,既然是对外发布的版本,居然没有一条注释,改之,现在调 
  试运行没有问题,可以发送短信。  下面提供的只是个简单的示例,要强调一些细节。假设你把API放在d:\message\com\commerceware\cmpp\ 
  目录下,我的示例也在改目录下,那么编译和运行请转到message目录下 
  编译javac -classpath D:\message\ f:\message\com\commerceware\cmpp\Test.java  运行java com.commerceware.cmpp.Test 13711111111 我爱ABC 
  运行时第一个参数是对方手机号,第二个参数是发送内容。以下是程序内容,登陆IP和用户名密码等我已 
  隐藏。但程序是正常的,你首先需要申请一个SP的资格  package com.commerceware.cmpp; 
  public class Test{ 
  public void readPaME(conn_desc con)  {  cmppe_result cr = null;  CMPP cp = new CMPP();  try{  cr = cp.readResPack(con);  System.out.println("cr.pack_id=" + cr.pack_id);  switch(cr.pack_id)  {  case CMPP.CMPPE_NACK_RESP: 
 
  System.out.println("CMPP.CMPPE_NACK_RESP:get nack pack");  break; 
  case CMPP.CMPPE_LOGIN_RESP:  cmppe_login_result cl;  cl = (cmppe_login_result)cr; 
 
  System.out.println("CMPP.CMPPE_LOGIN_RESP:login resp: STAT = "+cl.stat);  break; 
  case CMPP.CMPPE_LOGOUT_RESP: 
 
  System.out.println("CMPP.CMPPE_LOGOUT_RESP:logout resp: STAT = "+cr.stat);  break; 
  case CMPP.CMPPE_SUBMIT_RESP: 
 
  System.out.println("CMPP.CMPPE_SUBMIT_RESP");  cmppe_submit_result sr;  sr = (cmppe_submit_result)cr;  cmppe_cancel cc1 = new  
  cmppe_cancel();  //cc1.set_msgid(new  
  String(sr.msg_id)));  cc1.set_msgid(new  
  String(sr.msg_id));  break; 
  case CMPP.CMPPE_DELIVER: 
 
  System.out.println("CMPP.CMPPE_DELIVER:deliver: STAT = 0"); 
 
  cmppe_deliver_result cd=  
  (cmppe_deliver_result)cr; 
 
  cp.cmpp_send_deliver_resp(con,cd.seq,cd.stat);  break; 
  case CMPP.CMPPE_CANCEL_RESP: 
 
  System.out.println("CMPP.CMPPE_CANCEL_RESP:cancel: STAT = " + cr.stat);  break;  case CMPP.CMPPE_ACTIVE_RESP: 
 
  System.out.println("CMPP.CMPPE_ACTIVE_RESP:active resp: STAT " + cr.stat);  break;  default:  break; 
 
  }  }catch(Exception e)  {  System.out.println(e.getMessage());  e.printStackTrace();  System.out.println("have a exception");  try{  System.in.read();  }catch(Exception e1){} 
  }  } 
  public static void main(String[] args)  { 
  if(args[0] == null || args[0].equals("") || args[0].length() != 11){     System.out.println("手机号码输入不正确");     return;  }  if(args[1] == null || args[0].equals("") || args[1].length() == 0){     System.out.println("没有输入短信内容");  return;  } 
  CMPP p = new CMPP();  Test t = new Test();  char test[] = new char[10];  byte short_msg[] = new byte[150];  byte buf[] = new  byte[40];  byte b1[] = new  byte[10]; 
 
  cmppe_submit sub = new cmppe_submit();  cmppe_submit_result res =new cmppe_submit_result();  cmppe_cancel can = new cmppe_cancel(); 
  byte icp_id[] = new byte[10];     //ICP隐藏  icp_id[0] =0x**;  icp_id[1] =0x**;  icp_id[2] =0x**;  icp_id[3] =0x**;  icp_id[4] =0x**;  icp_id[5] =0x**;  icp_id[6] = 0;  byte svc_type[] = new byte[6];  svc_type[0] = 0x39;  svc_type[1] = 0x34;  svc_type[2] = 0x31;  svc_type[3] = 0x30;  svc_type[4] = 0; 
  byte fee_type = 0;  byte info_fee = 1;  byte proto_id = 1; 
  byte msg_mode = 1;      byte priority =9;  byte fee_utype = 2;  byte fee_user[] = new byte[CMPP.CMPPE_MAX_MSISDN_LEN];  for(int i=0; i<12; i++)  fee_user[0] = 0x31;  fee_user[1] = 0x33;  fee_user[2] = 0x38;  fee_user[3] = 0x30;  fee_user[4] = 0x35;  fee_user[5] = 0x30;  fee_user[6] = 0x30;  fee_user[7] = 0x31;  fee_user[8] = 0x30;  fee_user[9] = 0x36;  fee_user[10]= 0x34;  fee_user[11]= 0x0; 
      byte validate[] = new byte[10];  validate[0] =0;  byte schedule[] = new byte[2];  schedule[0] =0;  byte src_addr[] = new byte[12];  src_addr[0] = 0x31;  src_addr[1] = 0x33;  src_addr[2] = 0x38;  src_addr[3] = 0x30;  src_addr[4] = 0x35;  src_addr[5] = 0x30;  src_addr[6] = 0x30;  src_addr[7] = 0x31;  src_addr[8] = 0x30;  src_addr[9] = 0x36;  src_addr[10]= 0x34;  src_addr[11]= 0x0; 
  byte du_count = 1;  byte dst_addr[][] = new byte[10][15]; 
  dst_addr[0][0] = toHex(args[0].charAt(0)); //CMPPE_MAX_MSISDN_LEN+1  dst_addr[0][1] = toHex(args[0].charAt(1));  dst_addr[0][2] = toHex(args[0].charAt(2));  dst_addr[0][3] = toHex(args[0].charAt(3));  dst_addr[0][4] = toHex(args[0].charAt(4));  dst_addr[0][5] = toHex(args[0].charAt(5));  dst_addr[0][6] = toHex(args[0].charAt(6));  dst_addr[0][7] = toHex(args[0].charAt(7));  dst_addr[0][8] = toHex(args[0].charAt(8));  dst_addr[0][9] = toHex(args[0].charAt(9));  dst_addr[0][10]= toHex(args[0].charAt(10));  dst_addr[0][11]= 0x0; 
 
 
  //byte data_coding = 1;  byte data_coding = 15;            //15为GB2312  byte sm_len = 120; 
  String ss = args[1]; 
  try{     short_msg = ss.getBytes("GB2312");     ss = new String(short_msg);                  }catch(Exception e){      }  System.out.println(short_msg.length);                         cmppe_result cr = new cmppe_result();  cmppe_deliver_result rs = new cmppe_deliver_result();  try{  conn_desc con = new conn_desc();  System.out.println("connecting...");  p.cmpp_connect_to_ismg("111.111.111.111",7890,con); //登 
  陆信息隐藏,SORRY哈  System.out.println("ICP_ID:" + "******" + "   ICP_AUTH:" + "**");   p.cmpp_login(con,"*****","****",(byte)2,0x12,*******);  t.readPaME(con); 
  sub.set_icpid(icp_id );  sub.set_svctype(svc_type);  sub.set_feetype(fee_type );  sub.set_infofee(info_fee);  sub.set_protoid(proto_id);  sub.set_msgmode(msg_mode );  sub.set_priority(priority );  sub.set_validate(validate);  sub.set_schedule(schedule );  sub.set_feeutype(fee_utype);  sub.set_feeuser(fee_user);  sub.set_srcaddr(src_addr );  sub.set_dstaddr(dst_addr );  sub.set_ducount(du_count); 
  sub.set_msg(data_coding,short_msg.length,short_msg );  p.cmpp_submit(con,sub);  t.readPaME(con);  p.cmpp_active_test(con);  t.readPaME(con); 
  p.cmpp_logout(con);  t.readPaME(con); 
  }catch(Exception e)  {  System.out.println(e.getMessage());  e.printStackTrace();  System.out.println("have a exception");  try{  System.in.read();  }catch(Exception e1)  {  }  return;  }  } 
  public static byte toHex(char c){  switch(c){    case ?':      return 0x31;    case ?':      return 0x32;    case ?':      return 0x33;    case ?':      return 0x34;    case ?':      return 0x35;    case ?':      return 0x36;    case ?':      return 0x37;    case ?':      return 0x38;    case ?':      return 0x39;    case ?':      return 0x30;    default: break;  }  return 0x0;  } 
  } 
  如果您运行该程序得到该结果,就说明正常。  7  connecting...  ICP_ID:111111   ICP_AUTH:1111  login_type:2  CMPP_VERSION:18  cr.pack_id=-2147483647  CMPP.CMPPE_LOGIN_RESP:login resp: STAT = 0  cr.pack_id=5  CMPP.CMPPE_DELIVER:deliver: STAT = 0  cr.pack_id=-2147483644  CMPP.CMPPE_SUBMIT_RESP  cr.pack_id=-2147483640  CMPP.CMPPE_ACTIVE_RESP:active resp: STAT 0 
  主要看stat是0就行了,其它的是我的调试信息,首行7表示短信长度  
 
  | 
   
  
     | 
   
  
     相关文章:相关软件:  | 
   
   
      |