7

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

4

3 回答 3

17

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

设置

设置 1:您正在创建 SMPP 客户端

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

设置 2:您正在创建 SMSC

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

启动连接

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

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

这是发送出站请求的片段

//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 不经常使用。

我不确定为什么只发送“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);
于 2011-07-30T06:43:02.067 回答
0

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

免责声明:我为 Ozeki 工作。

于 2021-05-16T15:54:06.673 回答
0

我已经按照@Wahid 的回答创建了从 SMSC 服务器到 SMPP 收发器的 Deliver_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;
于 2021-03-10T07:13:02.943 回答