2017-05-24 5 views
0

私はopensmppを使ってsubmitメソッド(Submit_SM)を試してみました。しかし、後で、ESMEのリスナー側を使用してSMSCからメッセージを受信するために、配信方法(Deliver_SM)を使用する必要があることがわかります。 ここで私のコードバインドは正常ですが、deliverメソッドの応答は常にnullです。 誰かが私を助けることができる、または少なくとも私に少しの例を与える方法を提供してください PS:私は同期モードを使用します。配送方法を使用してopensmppを使用してショートメッセージを送信するにはどうすればよいですか?

import org.smpp.pdu.BindRequest 
import org.smpp.pdu.BindResponse 
import org.smpp.pdu.BindTransciever 
import org.smpp.pdu.BindTransmitter 
import org.smpp.pdu.BindReceiver 
import org.smpp.TCPIPConnection 
import org.smpp.Session 
import org.smpp.test.SMPPTest.SMPPTestPDUEventListener 
import org.smpp.pdu.AddressRange 
import org.smpp.Data 
import org.smpp.pdu.UnbindResp 
import org.smpp.pdu.DeliverSM 
import org.smpp.pdu.DataSM 
import org.smpp.pdu.DeliverSMResp 
import org.smpp.pdu.DataSMResp 
import org.smpp.pdu.PDU 
import org.smpp.pdu.Request 
import org.smpp.pdu.Response 
import org.smpp.ServerPDUEvent 
import org.smpp.pdu.Address 
import org.smpp.pdu.EnquireLink 
import org.smpp.pdu.EnquireLinkResp 

Session session = null; 
def bound = false 
boolean asynchronous = false; 
String bindOption = "tr"; 
String systemType = ""; 
String serviceType = ""; 
Address sourceAddress = new Address() 
Address destAddress = new Address() 
byte replaceIfPresentFlag = 0; 
String shortMessage = ""; // the message to send 
String scheduleDeliveryTime = ""; 
String validityPeriod = "" // default estimated validity default period 
byte esmClass = 0; 
byte protocolId = 0; 
byte priorityFlag = 0; 
byte registeredDelivery = 0; 
byte dataCoding = 0; 
byte smDefaultMsgId = 0; 
String messageId = ""; 
long receiveTimeout = Data.RECEIVE_BLOCKING; 
AddressRange addressRange = new AddressRange(); 
SMPPTestPDUEventListener pduListener = null; 

    println "begin binding operation..." 
    try { 

     // test if communication is already established 
     if (bound) { 
      System.out.println("Already bound, unbind first."); 
      return; 
     } 

     BindRequest request = null; 
     BindResponse response = null; 
     // type of the session 
     String syncMode = (asynchronous ? "a" : "s"); 

     // input values 


     if (bindOption.compareToIgnoreCase("t") == 0) { 
      request = new BindTransmitter(); 
     } else if (bindOption.compareToIgnoreCase("r") == 0) { 
      request = new BindReceiver(); 
     } else if (bindOption.compareToIgnoreCase("tr") == 0) { 
      request = new BindTransciever(); 
     } 

     ipAddress = "xxx.xxx.xx.xx"; 
     port = yyyy; 

     println "syncMode == "+syncMode 
     TCPIPConnection connection = new TCPIPConnection(ipAddress, port); 
     connection.setReceiveTimeout(20 * 1000); 
     session = new Session(connection); 

     systemId = "nnnnnn" 
     password = "nnnnnn" 

     // set values 
     request.setSystemId(systemId); 
     request.setPassword(password); 
     request.setSystemType(systemType); 
     request.setInterfaceVersion((byte) 0x34); 
     request.setAddressRange(addressRange); 

     // send the request 
     System.out.println("Bind request " + request.debugString()); 
     if (asynchronous) { 
      pduListener = new SMPPTestPDUEventListener(session); 
      response = session.bind(request, pduListener); 
     } else { 
      response = session.bind(request); 
     } 
     System.out.println("Bind response " + response.debugString()); 
     println "response.getCommandStatus() === "+response.getCommandStatus() 
     if (response.getCommandStatus() == Data.ESME_ROK) { 
      bound = true; 
      println "SMSC is bound succesfuuly with the ESME" 
     } 

    } catch (Exception e) { 
     //event.write(e, ""); 
     //debug.write("Bind operation failed. " + e); 
     System.out.println("Bind operation failed. " + e); 
    } finally { 
     //session.unbind() 
     //connection.close() 
    } 

    println "enquire data ... " 
    try { 
     final EnquireLink request = new EnquireLink(); 
     System.out.println("Enquire Link request " + request.debugString()); 
     final EnquireLinkResp response = session.enquireLink(request); 
     System.out.println("Enquire Link response " + response.debugString()); 
    } catch (Throwable e) { 
     e.printStackTrace(); 
    } 


try { 
    DeliverSM request = new DeliverSM(); 
    DeliverSMResp response; 

      // input values 
      serviceType = "" 
      sourceAddress.setNpi((byte)1) 
    sourceAddress.setTon((byte)1) 
    sourceAddress.setAddress("4123601", Data.SM_ADDR_LEN) 
      destAddress.setNpi((byte)1) 
    destAddress.setTon((byte)1) 
    destAddress.setAddress("0022233411686", Data.SM_ADDR_LEN) 
      esmClass = 0 
      registeredDelivery = 0; 
      dataCoding = 0; 

      // set values 
    request.setServiceType(serviceType); 
      request.setSequenceNumber(1) 
    request.setSourceAddr(sourceAddress); 
    request.setDestAddr(destAddress); 
    request.setEsmClass(esmClass); 
    request.setRegisteredDelivery(registeredDelivery); 
    request.setDataCoding(dataCoding); 
      request.setProtocolId(protocolId) 
      request.setPriorityFlag(priorityFlag); 
      request.setShortMessage("Hello world",Data.ENC_ASCII); 

    // send the request 
    System.out.println("Data request " + request.debugString()); 
    if (asynchronous) { 
     session.data(request); 
    } else { 
     response = session.deliver(request); // here the problem , the response is always null 
     System.out.println("Data response " + response.debugString()); 
     messageId = response.getMessageId(); 
    } 

} catch (Exception e) { 
     System.out.println("Data operation failed. " + e); 
    } 
finally { 
     session.unbind() 
} 

答えて

0

「response = session.deliver(request)」ではなく「PDU response = session.receive(0)」を使用してみます。パラメータ0は、応答を待つことを意味しないため、nullを返すことができます。しかし、配達が到着したときにあなたはそれを持っています。その後、あなたが応答を処理する必要があります:

 int commandId = pdu.getCommandId(); 

     switch(commandId) { 
      case Data.DELIVER_SM: 
       DeliverSM pduDeliver = (DeliverSM)pdu; 
       procesarDeliver(pduDeliver); 
       break; 

      case Data.ENQUIRE_LINK: 
       //Do something 
       break; 

      case Data.UNBIND: 
       //Do something 
       break; 

      default: 
       //Do something 
       break; 
     } 

私は私の英語のためにすみません....;)

関連する問題