关于联通API接口收不到上行短信问题

来源:互联网 发布:淘宝相片拍摄 编辑:程序博客网 时间:2024/04/28 05:34

我把我的测试代码贴出来,大家帮忙看看,是那里写错了,

//下行
package test;


import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;

import com.huawei.smproxy.SGIPSMProxy;
import com.huawei.smproxy.comm.sgip.message.SGIPMessage;
import com.huawei.smproxy.comm.sgip.message.SGIPSubmitMessage;
import com.huawei.smproxy.comm.sgip.message.SGIPSubmitRepMessage;
import com.huawei.smproxy.util.Args;

public class SGIPTest {

 //private static Logger log = LogManager.getLogger("send");
 private static String SPNumber = "";
 private static String ChargeNumber = "13052490455"; 计费号码 这里号码就不写了
 private static String ServiceType = "SHGRP";
 private static String host = "220.196.52.119"; // 主机名
 private static int port = 8801; // 端口号
 private static String CorpId = "91549"; // 企业代码
 private static String login_Name = ""; // 登陆名
 private static String login_PassWord = ""; // 登陆密码

 /**
  * @param args
  * @throws InterruptedException
  */
 public static void main(String[] args) throws Exception {
  // TODO Auto-generated method stub
  Args argstr = new Args();
  argstr.set("host", host);
  argstr.set("port", port);
  argstr.set("transaction-timeout", 10); // 操作超时时间(单位:秒)
  argstr.set("read-timeout", 15); // 物理连接读操作超时时间(单位:秒)
  argstr.set("source-addr", 91549); // SP…ID(最大为六位字符)
  argstr.set("login-name", login_Name);
  argstr.set("login-pass", login_PassWord);

  // 连接登陆
  SGIPSMProxy sgipsmp = new SGIPSMProxy(argstr); // 这里
  try {
   boolean reslut = sgipsmp.connect(login_Name, login_PassWord); // 登陆得到true和false

   System.out.println("reslut:::::::" + reslut);
   if (reslut) {
    System.out.println("连接成功...........");
    // sgipsmp.startService("localhost", 8801);
   } else {
    System.out.println("连接失败(用户名或密码错误)...........");
    return;
   }
  } catch (Exception ex) {
   System.out.println("网络异常...........");
   ex.printStackTrace();
   return;
  }

  SGIPListener sgipLis = new SGIPListener(argstr); // 启动监听
  System.out.println("ConnState::::::::" + sgipLis.getConnState());

  String[] UserNumber = {"13601638239"};
  
  String content = "你好:这是来此联通通道测试的一条短信(金杜信息)";
  byte[] MessageContent = content.getBytes("GB2312");

  try {
   // 下发短息
   SGIPSubmitMessage sgipsubmit = new SGIPSubmitMessage(
     SPNumber, // SP的接入号码         // String
     ChargeNumber, // 付费号码 string
     UserNumber, // 接收该短消息的手机号,最多100个号码 string[]
     CorpId, // 企业代码,取值范围为0~99999 string
     ServiceType, // 业务代码,由SP定义 stirng
     1, // 计费类型 int
     "", // 该条短消息的收费值 stirng
     "", // 赠送用户的话费 string
     0, // 代收费标志0:应收1:实收 int
     0, // 引起MT消息的原因 int
     0, // 优先级0~9从低 到高,默认为0 int
     null, // 短消息寿命的终止时间 date
     null, // 短消息定时发送的时间 date
     3, // 状态报告标记 int
     1, // GSM协议类型 int
     1, // GSM协议类型 int
     15, // 短消息的编码格式 int
     0, // 信息类型 int
     MessageContent.length, // 短消息内容长度 int
     MessageContent, // 短消息的内容 btye[]
     "" // 保留,扩展用 string
   );
   // sgipsmp.send(sgipsubmit);
   // 收到的响应消息转换成rep
   int status = ProcessSubmitRep(sgipsmp.send(sgipsubmit));
   if (status == 0) {
    System.out.println("消息发送成功..........");
   } else {
    System.out.println("消息发送失败..........");
   }
  } catch (Exception ex) {
   // log.error("发送消息异常:"+ex.getMessage(),ex);
   ex.printStackTrace();
  }


 }

 private static int ProcessSubmitRep(SGIPMessage msg) {
  // 收到的响应消息转换成repMsg
  SGIPSubmitRepMessage repMsg = (SGIPSubmitRepMessage) msg;
  System.out.println("status:::::::" + repMsg.getResult());
  if (repMsg != null && repMsg.getResult() == 0) {
   System.out.println("发送成功:::");
  }
  return repMsg.getResult();
 }

}


上行:
package test;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;

import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;

import com.huawei.smproxy.SGIPSMProxy;
import com.huawei.smproxy.comm.sgip.SSListener;
import com.huawei.smproxy.comm.sgip.message.SGIPDeliverMessage;
import com.huawei.smproxy.comm.sgip.message.SGIPMessage;
import com.huawei.smproxy.comm.sgip.message.SGIPSubmitRepMessage;
import com.huawei.smproxy.util.Args;

public class SGIPListener extends SGIPSMProxy {

 private static Logger log=LogManager.getLogger("recv");
 private SGIPTest sgipTest = null;
 private String serHost = "112.64.178.205";
 private String localhost = "localhost";
 private int localport = 4700;
 private int serviceport = 9903;

 public SGIPListener(Args args) {
  super(args);
  System.out.println("进入启动监听........");
  startService(localhost, localport);    //我想知道这里传递的host和port是本地的还是那的
 }

 /**
  * 收到用户回复的短信(上行)。
  *
  * @param msg
  *            收到的消息
  * @return 返回的相应消息。
  */
 public SGIPMessage onDeliver(SGIPDeliverMessage msg) {
  /** @todo do some thing to handle this message. then return a response */

  ProcessRecvDeliverMsg(msg);
  System.out.println("正在等待接收.......");
  return super.onDeliver(msg);
 }

 /**
  * 对收到短讯中心下发的短消息的处理。 收到用户信息
  *
  * @param msg
  *            短讯中心下发的短消息
  */
 public void ProcessRecvDeliverMsg(SGIPMessage msg) {
  if (msg instanceof SGIPSubmitRepMessage) {
   System.out.println("返回下发短信的相应消息");
  }
  if (msg instanceof SGIPDeliverMessage) {
   // 收到用户发送的短信(上行)
   SGIPDeliverMessage deliverMsg = (SGIPDeliverMessage) msg;
   String userNumber = deliverMsg.getUserNumber(); // 手机号码
   String msgContent = deliverMsg.toString(); // 短信内容
   // byte[] msgId = deliverMsg.getMsgContent();
   System.out.println("userNumber::::::" + deliverMsg.getUserNumber());
   System.out.println("msgcontent:::::::" + deliverMsg.toString());
   System.out.println("spNumber::::::::" + deliverMsg.getSPNumber());

   log.info("收到消息:"+deliverMsg);
   
   int commandId = deliverMsg.getCommandId(); // 响应内型
   System.out.println("commandId:::::::::" + commandId);
   if(commandId == 0){  //上传短信(接收)
    System.out.println("dstaddr::::::"+deliverMsg.getSPNumber());
    try {

    } catch (Exception e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
    }
   }
   
  }
 }

}


接收和发送都在这 我现在是短信能发出去,收短信收不到 ,请大家帮忙看看代码有问题吗急急
或者那位有成功的demo给我发到邮箱:ygqfshpc@163.com 或者贴在这 谢谢