如何加入收到的多部分短信(GSM Modem)(c#)

本文关键字:GSM Modem 何加入 多部 | 更新日期: 2023-09-27 18:18:57

我正在编写一个应用程序,从GSM调制解调器(中兴通讯公司)(+CMTI通知)接收短消息(SMS)。

我已经完成了我的程序,但是当有多部分短信时,我无法将它们彼此连接起来,并且它们都以单独的消息出现。(一个由3部分组成的消息有3个不同的消息)。我怎样才能把它们联系起来,明白哪个在哪个后面?(考虑某人连续给我发送了两条由3部分组成的消息,我该如何区分这两条消息?)

    编程语言:c#
  • 短信文本模式(AT+CMGF=1)

如何加入收到的多部分短信(GSM Modem)(c#)

我找到了,通过PDU报头我可以发现,如果有更多的短信和用户数据报头,我可以区分数据包。

//gsmcomm用户

List<string> messagesList = new List<messageList>();
List<SmsPdu> multiPartMsg = new List<SmsPdu>();

foreach (var i in modem.ReadMessages(PhoneMessageStatus.All, PhoneStorageType.Phone))
{
    string msg;
    if (SmartMessageDecoder.IsPartOfConcatMessage(((SmsDeliverPdu)i.Data)))
    {
        multiPartMsg.Add(i.Data);
        try
        {
            if (SmartMessageDecoder.AreAllConcatPartsPresent(multiPartMsg))
            {
                msg= SmartMessageDecoder.CombineConcatMessageText(multiPartMsg);
                messagesList.Add(msg);
                multiPartMsg.Clear();

            }
        }
        catch (Exception ex) {}

    }
    else
    {
        msg = ((SmsDeliverPdu)i.Data).UserDataText;
        messagesList.Add(msg);
    }
}

是的,我尝试了诺基亚的智能消息传递概念,用于连接多部分消息,但似乎有很多问题。最后我找到了PDU头里面有一些重要的东西比如。

如果您的消息是多部分的,您可以通过

查看。
bool Is_Multi_PART = SmartMessageDecoder.IsPartOfConcatMessage(SMSPDU);

看到……

DecodedShortMessage[] messages = comm.ReadMessages(PhoneMessageStatus.All, storage);
            foreach (DecodedShortMessage message in messages)
            {
                GsmComm.PduConverter.SmsDeliverPdu SMSPDU;
                SMSPDU = (GsmComm.PduConverter.SmsDeliverPdu)message.Data;
                bool Is_Multi_PART = SmartMessageDecoder.IsPartOfConcatMessage(SMSPDU); 
                byte[] element1 = message.Data.UserData;
                if (element1[0] == 5)
                {
                    byte[] numArray = new byte[2];
                    numArray[0] = element1[3];
                    numArray[1] = element1[2];
                    int referenceNumber = BitConverter.ToUInt16(numArray, 0);
                    int totalMessages = element1[4];
                    int currentNumber = element1[5];
                }
            }

如果你的消息是多部分消息,它应该总是包含PDU头与…

  1. 参考号码。
  2. 消息总数(Message/160).
  3. 当前消息数。(如果你有一条长度为250的消息,那么它同时是1,2)。