我正在创建一个应用程序,我的机器将像一个SMSC。从那里我只需要发送deliver_sm。服务器将发送绑定请求。我需要将我的机器与服务器绑定。我的应用程序将像smpp客户端一样工作。我有logica smpp.jar。但我很困惑如何只发送deliver_sm。请给我一些想法和代码。 可以anybdy请告诉我如何发送出站请求,这对我也很有帮助。 谢谢 科希克。
答案 0 :(得分:16)
您的问题无法以现在呈现的方式回答。我在下面解释了两种可能的设置,然后是您正在寻找的解决方案我的答案基于SMPP 3.4 spec。
<强>设置强>
Setup-1:您正在创建SMPP客户端
设置-2:您正在创建SMSC
发起连接
通常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
发送消息
我已经在设置部分讨论了这个问题。在这里重复,
我不确定为什么只发送“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 工作。