如何从SMSC发送deliver_sm请求

时间:2011-07-18 07:20:56

标签: smpp

我正在创建一个应用程序,我的机器将像一个SMSC。从那里我只需要发送deliver_sm。服务器将发送绑定请求。我需要将我的机器与服务器绑定。我的应用程序将像smpp客户端一样工作。我有logica smpp.jar。但我很困惑如何只发送deliver_sm。请给我一些想法和代码。  可以anybdy请告诉我如何发送出站请求,这对我也很有帮助。 谢谢  科希克。

3 个答案:

答案 0 :(得分:16)

您的问题无法以现在呈现的方式回答。我在下面解释了两种可能的设置,然后是您正在寻找的解决方案我的答案基于SMPP 3.4 spec

<强>设置

Setup-1:您正在创建SMPP客户端

  1. 您正在创建SMPP客户端。客户端通常会启动连接。客户端也称为ESME(外部短消息实体)。
  2. 您的客户将连接到SMSC。 SMSC是服务器,它们通常等待连接。
  3. ESME可以通过“submit_sm”或“data_sm”PDU发送消息。
  4. 设置-2:您正在创建SMSC

    1. SMSC可以通过“deliver_sm”或“data_sm”PDU发送消息。
    2. 发起连接

      通常ESME会向SMSC发送绑定请求。绑定请求可以通过“bind_transmitter”,“bind_receiver”或“bind_transceiver”PDU之一发送。

      SMSC可以急切地邀请ESME通过“outbind”PDU发送绑定请求。在这种情况下,SMSC必须知道ESME的IP /端口。它很少使用。

      这是一个发送outbind请求的片段

      //you will need these classes
      import org.smpp.Session;
      import org.smpp.pdu.Outbind;
      
      Session session = .... ;//Assuming you created a session instance
      Outbind outbind = new Outbind(...);//assuming you created a outbind instance
      
      session.outbind(outbind);//send outbind
      

      发送消息

      我已经在设置部分讨论了这个问题。在这里重复,

      1. ESME可以通过“submit_sm”或“data_sm”PDU发送消息。 data_sm不经常使用。
      2. SMSC可以通过“deliver_sm”或“data_sm”PDU发送消息。 data_sm不经常使用。
      3. 我不确定为什么只发送“deliver_sm”非常重要。作为编码器,您可以控制要发送的PDU类型。

        这里有一个发送deliver_sm请求的片段

        //you will need these classes
        import org.smpp.Session;
        import org.smpp.pdu.DeliverSM;
        
        DeliverSM pdu = new DeliverSM();
        pdu.setSequenceNumber(1);//set unique numbers
        pdu.setSourceAddr(new Address(1, 1, "12120001234"));//TON, NPI, source number
        pdu.setDestAddr(new Address(1, 1, "12120004321"));//TON, NPI, destination number
        pdu.setShortMessage("Hello world");
        session.deliver(pdu);
        

答案 1 :(得分:0)

我按照@Wahid 的回答创建了从 SMSC 服务器到 SMPP 收发器的 delivery_sm 请求。我对创建/获取会话实例感到困惑。 我是通过从 PDUProcessorGroup 获取会话实例来实现的,我们在启动 SMSC 会话期间实例化了它,遍历它以获取 SimulatorPDUProcessor 实例并从中获取会话实例。

int procCount = processors.count();
SimulatorPDUProcessor proc;
SMSCSession session=null;
for (int i = 0; i < procCount; i++) {
   proc = (SimulatorPDUProcessor) processors.get(i);
   session = proc.getSession();
}

return session;

答案 2 :(得分:0)

如果您想提供这样的解决方案,请检查 Ozeki 的内置 SMPP 服务器。它正是这样做的。要查看通过网络发送的 SMPP 传送 sm pdu,最好使用的工具是 Wireshark,因为它可以让您在字节级别上查看 pdu。 ozeki 短信网关 SMPP simulator 可以满足您的需求。它首先打开一个侦听器 TCP/IP 套接字,并让 SMPP 客户端绑定到它,然后当模拟传入的 SMS(或从移动网络接收到)时,它会转换它并将其作为 SMPP delivery_sm 请求发送。

免责声明:我为 Ozeki 工作。