如何加入收到的多部分短信(GSM Modem)(c#)
本文关键字:GSM Modem 何加入 多部 | 更新日期: 2023-09-27 18:18:57
我正在编写一个应用程序,从GSM调制解调器(中兴通讯公司)(+CMTI通知)接收短消息(SMS)。
我已经完成了我的程序,但是当有多部分短信时,我无法将它们彼此连接起来,并且它们都以单独的消息出现。(一个由3部分组成的消息有3个不同的消息)。我怎样才能把它们联系起来,明白哪个在哪个后面?(考虑某人连续给我发送了两条由3部分组成的消息,我该如何区分这两条消息?)
- 编程语言:c#
- 短信文本模式(AT+CMGF=1)
我找到了,通过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头与…
- 参考号码。
- 消息总数(Message/160).
- 当前消息数。(如果你有一条长度为250的消息,那么它同时是1,2)。