有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java通过SMPP连接SMS

我有一个问题,我不能发送超过255个字的短信。我做了一些关于如何连接消息的研究,但我仍然无法让它工作。有人能给我一些建议吗?下面是我的代码:

private int SMSMt(String pstrLoginName, String pstrServiceID, String 
pstrCPID, String pstrMSISDN, String pstrKeyword, String pstrPriceCode, 
String pstrChargeMSISDN, String pstrSubID, String pstrDstTrxID, String 
pstrShortCode, String pstrSMS, String pstrLanguage, SubmitResult pobjRst)
{
    int intResult = 0;
    try
    {
        if (!this.mobjSMPP.mblnBound)
        {
            intResult = 9910;
        }
        else
        {
            SubmitSM objReq = new SubmitSM();
            Address objSrcAddress = new Address();
            Address objDstAddress = new Address();

            objSrcAddress.setNpi((byte)1);
            objSrcAddress.setTon((byte)0);
            objSrcAddress.setAddress(pstrShortCode);

            objDstAddress.setNpi((byte)1);
            objDstAddress.setTon((byte)0);
            objDstAddress.setAddress(pstrMSISDN);

            objReq.setServiceType("");
            objReq.setSourceAddr(objSrcAddress);
            objReq.setDestAddr(objDstAddress);
            objReq.setReplaceIfPresentFlag((byte)0);

            objReq.setScheduleDeliveryTime("");
            objReq.setValidityPeriod("");
            objReq.setPriorityFlag((byte)1);
            objReq.setRegisteredDelivery((byte)1);
            objReq.setUserMessageReference((short)25);

            WriteLog("pstrLanguage=" + pstrLanguage);
            if (pstrLanguage.equals("1")) {
                objReq.setDataCoding((byte)8);
                WriteLog("Ori pstrSMS=" + pstrSMS);
                objReq.setShortMessage(pstrSMS,"UTF_16BE");

                //String HexStr = new String("A" + "\u00ea" + "\u00f1" + "\u00fc" + "\u0eaa" + "C");
                //WriteLog("HexStr=" + HexStr);
                //pstrSMS = stringToHex(pstrSMS);

                //StringConverter TestRun = new StringConverter(pstrSMS);

                /*pstrSMS = HexStr;*/
                //pstrSMS = new String("\u0eaa");
                //pstrSMS = new String("0x0eaa");

                /*pstrSMS = "世界您好";
                WriteLog("Ori pstrSMS=" + pstrSMS);
                //byte[] messageData = new ASCIIEncoding().encode(pstrSMS);

                byte[] b = s.getBytes(StandardCharsets.US_ASCII);*/

                WriteLog("Ori pstrSMS [unicode]=" + pstrSMS);

                //byte[] textByte = pstrSMS.getBytes("UTF-16BE");
                //WriteLog("HexCode [encoded with UTF-16BE]= " + textByte);
                //pstrSMS = textByte.toString(); //cannot convert byte[] to string

        }
        else {
            objReq.setDataCoding((byte)0);
            objReq.setShortMessage(pstrSMS);
        }

共 (1) 个答案

  1. # 1 楼答案

    设置用户引用(setUserMessageReference)是不够的。还必须设置片段数和片段数。取决于库方法。 此外,您必须将消息拆分为255个现有块。 因此,如果您有400字节的消息,那么您可以执行以下操作:

       First fragment:
       setReference=25
       numberOfFragments=2
       fragmentNumber=1
       message=first 255 bytes
    
       Second fragment:
       setReference=25
       numberOfFragments=2
       fragmentNumber=2
       message=rest 145 bytes
    

    还请注意,许多SMSC供应商允许在内部对SMPP进行分段。 SMPP中有2个参数用于处理消息:

    1)Message(mandatory) (limited to 255 bytes)
    2)Payload message(optional) (not limited)