首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用JSMPP接收SMS有时会停止

使用JSMPP接收SMS有时会停止
EN

Stack Overflow用户
提问于 2012-09-20 03:46:10
回答 1查看 4K关注 0票数 1

我正在使用来自Google的JSMPP接收来自SMS服务中心的短信。有时,我的程序停止接收来自SMSC的短信,我不得不关闭程序并重新打开程序。然后从SMSC中排队的SMSes开始接收。这种情况在一段时间后就会发生,比如在7或8小时之后。这是我使用的代码

SMPP Init代码

代码语言:javascript
复制
l.info("SMPP Initialization");

SMPPSession s = new SMPPSession();

s.setMessageReceiverListener(new Receive(s));


s.connectAndBind(Settings.smsc_host,Settings.smsc_port, BindType.BIND_TRX,
Settings.smsc_user, Settings.smsc_password,Settings.smsc_msg_setting, TypeOfNumber.UNKNOWN,
NumberingPlanIndicator.UNKNOWN, null, Settings.smsc_timeout);

ProcessSMS.s = s;

l.info("SMPP Initialization Success");

短消息接收代码

代码语言:javascript
复制
package sms;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

import org.apache.log4j.Logger;
import org.jsmpp.bean.AlertNotification;
import org.jsmpp.bean.DataSm;
import org.jsmpp.bean.DeliverSm;
import org.jsmpp.bean.MessageType;
import org.jsmpp.extra.ProcessRequestException;
import org.jsmpp.session.DataSmResult;
import org.jsmpp.session.MessageReceiverListener;
import org.jsmpp.session.Session;

import processor.ProcessSMS;

public class Receive implements MessageReceiverListener {

private static final ExecutorService pool = Executors.newFixedThreadPool(10);

private static final Logger l = Logger.getLogger(Receive.class);

private Thread thread;

public Receive(){
super();
}

public Receive(Session s){
this();
}

@Override
public DataSmResult onAcceptDataSm(DataSm arg0, Session arg1)
throws ProcessRequestException {

return null;
}

@Override
public void onAcceptAlertNotification(AlertNotification arg0) {


}

@Override
public void onAcceptDeliverSm(DeliverSm arg0)
throws ProcessRequestException {

l.info("Received SMS " + arg0);



if(MessageType.SMSC_DEL_RECEIPT.containedIn(arg0.getEsmClass())){

}else{
pool.submit(new ProcessSMS(arg0));
//thread = new Thread(new ProcessSMS(arg0));
//thread.start();
}

}

}

,这里是状态更改类

代码语言:javascript
复制
package sms;

import java.io.IOException;

import global.Shared;
import log.SMSCStateLogger;

import org.jsmpp.bean.BindType;
import org.jsmpp.bean.NumberingPlanIndicator;
import org.jsmpp.bean.TypeOfNumber;
import org.jsmpp.extra.SessionState;
import org.jsmpp.session.SMPPSession;
import org.jsmpp.session.Session;
import org.jsmpp.session.SessionStateListener;

import processor.ProcessSMS;
import settings.Settings;

public class StateChange implements SessionStateListener{

private static SMSCStateLogger l  = new SMSCStateLogger(StateChange.class);

private Session s;

@Override
public void onStateChange(SessionState arg0, SessionState arg1, Object arg2) {
//arg0 = new State
//arg1 = old State

if(!arg0.isBound() && arg1.isBound()){
int con = Shared.getNextReConnectInterval();
l.info("State changed from " + arg1 + " to " + arg0 + " on " + arg2);

while(true){
l.info("Re Connection in " + con + " ms");

try{
Thread.sleep(con);
}catch(InterruptedException iex){
l.fatal("Re Connection failed due to exception " + iex);
break;
}

s = new SMPPSession();

((SMPPSession) s).setMessageReceiverListener(new Receive(s));
s.addSessionStateListener(new StateChange());

try{

((SMPPSession) s).connectAndBind(Settings.smsc_host,Settings.smsc_port,  BindType.BIND_TRX,
Settings.smsc_user, Settings.smsc_password,Settings.smsc_msg_setting, TypeOfNumber.UNKNOWN,
NumberingPlanIndicator.UNKNOWN, null, Settings.smsc_timeout);

}catch(IOException ioex){
l.fatal("Connection failed due to " + ioex.getMessage());
}

ProcessSMS.s = (SMPPSession) s;

l.info("Re Connection success");

break;


}
}
}

}

有人知道这是怎么回事吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-08 11:15:49

https://github.com/uudashr/jsmpp更新了JSMPP。

下载使用git运行mvn的源代码来创建jar存档。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12505818

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档