SMPP服务器CloudHopper - 我应该如何接收多部分消息?

时间:2015-12-30 15:21:11

标签: java sms cloud messaging smpp

我有CloudHopper SMPP服务器,此时我可以收到一条简单的短消息。

start "" /wait cmd /c temp.bat |start "" /wait cmd /c temp2.bat

但是我应该做些什么来接收长(多部分)消息? 我不知道我要用什么物品...... 请帮帮我。

非常感谢。

1 个答案:

答案 0 :(得分:0)

以下处理在接收已拆分为多个PDU的长消息时将获得的多部分长消息PDU:

import com.cloudhopper.commons.charset.GSMCharset;
import com.cloudhopper.commons.gsm.GsmUtil;
import com.cloudhopper.smpp.pdu.DeliverSm;
import com.cloudhopper.smpp.util.SmppUtil;

...

DeliverSm mobileOriginatedMessage = (DeliverSm) pduRequest;

boolean isUdh = SmppUtil.isUserDataHeaderIndicatorEnabled(mobileOriginatedMessage.getEsmClass());
if (isUdh) {
    byte[] userDataHeader = GsmUtil.getShortMessageUserDataHeader(messageBytes);
    int thisMessageId = userDataHeader[3] & 0xff;
    int totalMessages = userDataHeader[4] & 0xff;
    int currentMessageNum = userDataHeader[5] & 0xff;

    messageBytes = GsmUtil.getShortMessageUserData(messageBytes);

    GSMCharset gsmCharset = new GSMCharset();
    String message = gsmCharset.decode(messageBytes);       // Example decoding, depends on charset used

    System.out.println("thisMessageId: " + thisMessageId);  // unique to message, same across all message parts
    System.out.println("totalMessages: " + totalMessages);  
    System.out.println("currentMessageNum: " + currentMessageNum);
    System.out.println("Message: " + message);
}

...

以上显示了如何:

  • 确定PDU是否为多部分长(UDH)消息
  • 获取所有UDH标头信息,以便您了解
    • 该部分属于哪个消息
    • 收到了哪些部件号,以便按正确的顺序将消息重新组合在一起
    • 以及您期望的部件总数
  • 获取每个部分的实际消息文本