我正在编写一个从 GSM调制解调器(中兴通讯公司)收到短消息(短信)的应用程序( + CMTI通知)
我已经完成了我的程序,但是当有多部分短信时,我无法将它们彼此连接,并且所有这些都是单独的消息。(例如,3部分消息有3个不同的消息)。我如何连接它们并了解哪一个是哪一个? (考虑某人一个接一个地向我发送两个3部分的消息,我如何区分这两个消息?)
答案 0 :(得分:2)
我发现它,通过PDU Header我可以发现,如果有更多的smss和用户数据头,我可以区分数据包。
答案 1 :(得分:0)
是的,我尝试了诺基亚智能消息传递概念,用于连接多部分消息,但似乎有很多问题。所以最后我发现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标头 ...
答案 2 :(得分:0)
//对于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);
}
}