做联通短信接口(JAVA)的开发遇到个问题?

ggyy2005 2009-02-17 04:37:38
系统很简单 ,有个线程不停的跑从数据库中读出数据,调联通的接口发短信。。。。。。
但是放哪里跑2,3天就会报:
java.lang.IllegalStateException: 登录不成功:其它错误
at com.huawei.smproxy.SGIPSMProxy.connect(SGIPSMProxy.java:72)

重启应用就又可以登录了......... 我怀疑代码是不是哪里有问题(smproxy.jar)????
一下是调联通接口的代码,线程没隔一分钟调用一次getInstance()方法.



public static ZxsSGIPSMProxy sgipProxy = null;

/**
* 用SGIP长连接发送联通短信
*
* @param mobile
* @param content
* @return 1提交短信失败 0提交短信成功
*/
private static int sendUnicomMsgBySGIP(String content, String mobile, String serviceCode) {
byte[] contentByte = null;
try {
contentByte = content.getBytes("GBK");// 统一处理为汉字
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
return 1;
}
String[] mobiles = new String[] { mobile };

SGIPSubmitMessage msg = new SGIPSubmitMessage(serviceCode, // SPNumber
"000000000000000000000", // ChargeNumber
mobiles, // UserNumber
"99999", // CorpId
"SHGRP", // ServiceType
0, // 1, //FeeType
"0", // "100", //FeeValue
"0", // "100", //GivenValue
0, // AgentFlag
2, // 0, //MorelatetoMTFlag
0, // Priority
null, // ExpireTime
null, // ScheduleTime
1, // 3, //ReportFlag
0, // 1, //TP_pid
0, // 1, //TP_udhi
15, // MessageCoding(15为GBK编码;0为ASCII码;8为UCS2编码)
0, // MessageType
contentByte.length, // MessageLength
contentByte, // MessageContent
"" // reserve
);
SGIPMessage resp = null;
try {
log.debug("getConn: "+sgipProxy.getConn()+" ,getConnState: "+sgipProxy.getConnState()+" ,sgipProxy: "+sgipProxy);
resp = sgipProxy.send(msg);
log.debug(resp + ",=======time:" + msg.getTimeStamp()
+ ",srcnod:" + msg.getSrcNodeId() + "cmdId"
+ msg.getCommandId());
if(resp == null) {
log.error("联通提交短信失败111!!!!!!!!!!!!!!!!!!!!!!!!!!");
reConn();
return 1;
}
} catch (IOException e1) {
sgipProxy.close();
log.error("联通提交短信失败2222!!!!!!!!!!!!!!!!!!!!!!!!!!");
log.error(e1.getMessage());
log.error("尝试重新连接!!!!!!!!!!!!!!!!!!!!!!!!!!");
getInstance();
return 1;
}
return 0;
}


public static void getInstance() {
if(sgipProxy==null || sgipProxy.getConnState()!=null) {
try {
String accountId = Constant.SMS_CHINAUNICOM_ACCOUNTID; // 服务登录名
String password = Constant.SMS_CHINAUNICOM_PASSWORD; // 服务登录密码

log.debug("开始连接联通接口:>>>>>>>>>>>>>>>>>"+accountId+" "+" "+password);

SimpleDateFormat formatter = new java.text.SimpleDateFormat(
"yyyy-MM-dd HH:mm:ss");
Args ag = null;
sgipProxy = null;
try {
log.debug("=======================11111aaaa========================");
ag = new Cfg(Constant.LTConfig, true).getArgs("SGIPConnect");
log.debug("=======================11111========================: "
+ ag.get("host", new String())
+ ag.get("port", new String())
+ ag.get("transaction-timeout", new String())
+ ag.get("read-timeout", new String())
+ ag.get("source-addr", new String())
+ ag.get("version", new String())
+ ag.get("sequence-number", new String())
+ ag.get("debug", new String()));
log.debug("=======================11111bbbb========================");
} catch (IOException e) {
log.error("读取配置文件失败!!!!!!!!!!!!!!!!!!!!!!!");
log.error(e.getMessage());
e.printStackTrace();
}
log.debug("=======================222222========================");
sgipProxy = new ZxsSGIPSMProxy(ag);
log.debug("=======================333333========================");
boolean isUnicomCon = sgipProxy.connect(accountId, password);
log.debug("=======================444444========================");
if (isUnicomCon)
log.debug("成功登陆时间:"
+ formatter.format(Calendar.getInstance().getTime()));
log.debug("=======================555555========================");
} catch (Exception e2) {
sgipProxy.close();
log.error("联通接口连接失败!!!!!!!!!!!!!!!!!!!!!!!");
log.error(e2.getMessage(),e2);
log.error(e2.getMessage());
e2.printStackTrace();
}
}
}

private static void reConn() {
try {
log.debug("=======================reConn========================");
sgipProxy.close();
String accountId = Constant.SMS_CHINAUNICOM_ACCOUNTID; // 服务登录名
String password = Constant.SMS_CHINAUNICOM_PASSWORD; // 服务登录密码

log.debug("开始连接联通接口:>>>>>>>>>>>>>>>>>"+accountId+" "+" "+password);

SimpleDateFormat formatter = new java.text.SimpleDateFormat(
"yyyy-MM-dd HH:mm:ss");
Args ag = null;
sgipProxy = null;
try {
log.debug("=======================11111aaaa========================");
ag = new Cfg(Constant.LTConfig, true).getArgs("SGIPConnect");
log.debug("=======================11111========================: "
+ ag.get("host", new String())
+ ag.get("port", new String())
+ ag.get("transaction-timeout", new String())
+ ag.get("read-timeout", new String())
+ ag.get("source-addr", new String())
+ ag.get("version", new String())
+ ag.get("sequence-number", new String())
+ ag.get("debug", new String()));
log.debug("=======================11111bbbb========================");
} catch (IOException e) {
log.error("读取配置文件失败!!!!!!!!!!!!!!!!!!!!!!!");
log.error(e.getMessage());
e.printStackTrace();
}
log.debug("=======================222222========================");
sgipProxy = new ZxsSGIPSMProxy(ag);
log.debug("=======================333333========================");
boolean isUnicomCon = sgipProxy.connect(accountId, password);
log.debug("=======================444444========================");
if (isUnicomCon)
log.debug("成功登陆时间:"
+ formatter.format(Calendar.getInstance().getTime()));
log.debug("=======================555555========================");

} catch (Exception e2) {
sgipProxy.close();
log.error("联通接口连接失败!!!!!!!!!!!!!!!!!!!!!!!");
log.error(e2.getMessage(),e2);
log.error(e2.getMessage());
e2.printStackTrace();
}
}




好像说是连接没有关闭而又去连接会报这个错 , 但是我在异常中已经关闭了连接才去重连的啊 . 谁有没有现成的代码给我参考下呢?
...全文
898 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
zouhuiqun 2012-07-16
  • 打赏
  • 举报
回复
我也碰过yangbo_shanghai那种问题,请问下了解的人知道是什么原因造成的吗?
yangbo_shanghai 2012-06-01
  • 打赏
  • 举报
回复
楼主,问题怎么解决的,我这边也遇到了类似的问题,每次服务器重启后就有可以发送短信。怎么办呢?
曲大家 2012-04-25
  • 打赏
  • 举报
回复
楼主,能把源码给我发一份吗?我也在做联通短信平台 ,谢谢
664958797@qq.com
xxxxxxbin 2011-11-07
  • 打赏
  • 举报
回复
楼主,我也在找短信接口,网上找不到,可否发我些资料。
大叔obnijeh 2009-06-09
  • 打赏
  • 举报
回复
老大,你这个和我的一样,只能发送一次。
ggyy2005 2009-02-17
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 fulianglove 的回复:]
你的数据库连接从哪里来的?连接池?还是每次新建
[/Quote]

连接池 ,但是这和数据库连接没关系啊
fulianglove 2009-02-17
  • 打赏
  • 举报
回复
你的数据库连接从哪里来的?连接池?还是每次新建
捏造的信仰 2009-02-17
  • 打赏
  • 举报
回复
发送失败了就一定要关闭了连接吗?能不能多试几次?
ggyy2005 2009-02-17
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 YidingHe 的回复:]
确认只有一个线程在调用这个类吗?
[/Quote]

确认只有一个线程调用它

Oracle数据库 , 联通的好麻烦。移动的会自动踢掉前一个连接 方便多了~~
fulianglove 2009-02-17
  • 打赏
  • 举报
回复
什么数据库?
捏造的信仰 2009-02-17
  • 打赏
  • 举报
回复
确认只有一个线程在调用这个类吗?
酒剑仙 2009-02-17
  • 打赏
  • 举报
回复
SGIP是联通的?
我怎么记得是移动的啊
联通是CMPP吧

反正不懂 路过 帮顶!

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧