GSMComm SMS传递报告

GSMComm SMS传递报告,sms,report,gsmcomm,Sms,Report,Gsmcomm,我一直在尝试在C#应用程序中使用,以便使用手机(通过USB电缆连接)作为GSM调制解调器发送SMS消息。 我已经在SO中阅读了所有类似的帖子,但没有帮助 除了交付报告外,一切正常。我将RequestStatusReport设置为true,并启用了通知(启用消息基因化()) 问题是我无法阅读收到的交付报告,尽管我知道它的存储(总是“SR”)和索引号。我一直收到一个321错误代码(无效索引),因为当我尝试从中读取时,SR存储看起来是空的 MessageReceived event代码和相应的报告如下

我一直在尝试在C#应用程序中使用,以便使用手机(通过USB电缆连接)作为GSM调制解调器发送SMS消息。 我已经在SO中阅读了所有类似的帖子,但没有帮助

除了交付报告外,一切正常。我将RequestStatusReport设置为true,并启用了通知(启用消息基因化())

问题是我无法阅读收到的交付报告,尽管我知道它的存储(总是“SR”)和索引号。我一直收到一个321错误代码(无效索引),因为当我尝试从中读取时,SR存储看起来是空的

MessageReceived event代码和相应的报告如下,如有任何帮助,将不胜感激

private static void Comm_MessageReceived(object sender, MessageReceivedEventArgs e)
{
    IMessageIndicationObject obj = e.IndicationObject;
    if (obj is MemoryLocation)
    {
        MemoryLocation loc = (MemoryLocation)obj;
        Util.AddLog(string.Format("New message received in storage \"{0}\", index {1}.", loc.Storage, loc.Index));

        DecodedShortMessage msg = Comm.ReadMessage(loc.Index, loc.Storage);

        if (((SmsPdu)msg.Data) is SmsStatusReportPdu)
        {
            SmsStatusReportPdu data = (SmsStatusReportPdu)msg.Data;
            Util.AddLog("rec msg ref #: " + data.MessageReference.ToString());
        }
    }
    else
    {
        Util.AddLog("Error: Unknown notification object!");
    }
}
报告:

New message received in storage "SR", index 0.
[GSM_LOG]  17:08:49.528 Reading message...
[Catch in MessageReceived]  ##### ERROR: Message service error 321 occurred.
[GSM_LOG]  17:08:49.501 [gsmphone] >> 
[GSM_LOG]  17:08:49.501 [gsmphone]    +CDSI: "SR",0
[GSM_LOG]  17:08:49.501 [gsmphone]    
[GSM_LOG]  17:08:49.501 [gsmphone] Unsolicited message: New SMS-STATUS-REPORT received (indicated by memory location)
[GSM_LOG]  17:08:49.501 [gsmphone] Firing async MessageReceived event.
[GSM_LOG]  17:08:49.528 [gsmphone] Selecting "SR" as read storage...
[GSM_LOG]  17:08:49.528 [gsmphone] << AT+CPMS="SR"
[GSM_LOG]  17:08:49.528 [gsmphone]    
[GSM_LOG]  17:08:49.528 [gsmphone] >> AT+CPMS="SR"
[GSM_LOG]  17:08:49.528 [gsmphone]    
[GSM_LOG]  17:08:49.528 [gsmphone]    +CPMS: 0,0,0,23,1,40
[GSM_LOG]  17:08:49.528 [gsmphone]    
[GSM_LOG]  17:08:49.528 [gsmphone]    OK
[GSM_LOG]  17:08:49.528 [gsmphone]    
[GSM_LOG]  17:08:49.528 [gsmphone] Memory status: 0/0 (0% used)
[GSM_LOG]  17:08:49.528 [gsmphone] Activating PDU mode...
[GSM_LOG]  17:08:49.528 [gsmphone] << AT+CMGF=0
[GSM_LOG]  17:08:49.528 [gsmphone]    
[GSM_LOG]  17:08:49.528 [gsmphone] >> AT+CMGF=0
[GSM_LOG]  17:08:49.528 [gsmphone]    
[GSM_LOG]  17:08:49.528 [gsmphone]    OK
[GSM_LOG]  17:08:49.528 [gsmphone]    
[GSM_LOG]  17:08:49.528 [gsmphone] Reading message from index 0...
[GSM_LOG]  17:08:49.528 [gsmphone] << AT+CMGR=0
[GSM_LOG]  17:08:49.528 [gsmphone]    
[GSM_LOG]  17:08:49.528 [gsmphone] >> AT+CMGR=0
[GSM_LOG]  17:08:49.528 [gsmphone]    
[GSM_LOG]  17:08:49.528 [gsmphone]    +CMS ERROR: 321
[GSM_LOG]  17:08:49.528 [gsmphone]    
[GSM_LOG]  17:08:49.545 [gsmphone] Failed. Phone reports message service (MS) error 321.
[GSM_LOG]  17:08:49.545 [gsmphone] AT+CMGR=0
[GSM_LOG]  17:08:49.545 [gsmphone] 
[GSM_LOG]  17:08:49.545 [gsmphone] +CMS ERROR: 321
[GSM_LOG]  17:08:49.545 [gsmphone] 
[GSM_LOG]  17:08:49.548 [gsmphone] Ending async MessageReceivedEventHandler call
在索引为0的存储器“SR”中接收到新消息。
[GSM_LOG]17:08:49.528正在阅读消息。。。
[Catch in MessageReceived]####错误:发生消息服务错误321。
[GSM_LOG]17:08:49.501[gsmphone]>>
[GSM_LOG]17:08:49.501[gsmphone]+CDSI:“SR”,0
[GSM_LOG]17:08:49.501[gsmphone]
[GSM_LOG]17:08:49.501[gsmphone]未经请求的消息:收到新的SMS-STATUS-REPORT(由内存位置指示)
[GSM_LOG]17:08:49.501[gsmphone]触发异步消息接收事件。
[GSM_LOG]17:08:49.528[gsmphone]选择“SR”作为读取存储器。。。
[GSM_LOG]17:08:49.528[gsmphone]>AT+CPMS=“SR”
[GSM_LOG]17:08:49.528[gsmphone]
[GSM_LOG]17:08:49.528[gsmphone]+CPMS:0,0,23,1,40
[GSM_LOG]17:08:49.528[gsmphone]
[GSM_LOG]17:08:49.528[gsmphone]正常
[GSM_LOG]17:08:49.528[gsmphone]
[GSM_LOG]17:08:49.528[gsmphone]内存状态:0/0(0%已使用)
[GSM_LOG]17:08:49.528[gsmphone]正在激活PDU模式。。。
[GSM_LOG]17:08:49.528[gsmphone]>AT+CMGF=0
[GSM_LOG]17:08:49.528[gsmphone]
[GSM_LOG]17:08:49.528[gsmphone]正常
[GSM_LOG]17:08:49.528[gsmphone]
[GSM_LOG]17:08:49.528[gsmphone]正在从索引0读取消息。。。
[GSM_LOG]17:08:49.528[gsmphone]>AT+CMGR=0
[GSM_LOG]17:08:49.528[gsmphone]
[GSM_LOG]17:08:49.528[gsmphone]+CMS错误:321
[GSM_LOG]17:08:49.528[gsmphone]
[GSM_LOG]17:08:49.545[gsmphone]失败。电话报告信息服务(MS)错误321。
[GSM_LOG]17:08:49.545[gsmphone]AT+CMGR=0
[GSM_LOG]17:08:49.545[gsmphone]
[GSM_LOG]17:08:49.545[gsmphone]+CMS错误:321
[GSM_LOG]17:08:49.545[gsmphone]
[GSM_LOG]17:08:49.548[gsmphone]正在结束异步消息ReceivedEventHandler呼叫

指示对象可以是MemoryLocation或ShortMessage。对于接收到的短消息(用于传递状态),无需再次从内存位置读取,因为您已经拥有该对象,只需对其进行解码。下面这个对我有用

private void comm_MessageReceived(object sender, MessageReceivedEventArgs e)
    {
        try
        {
            IMessageIndicationObject obj = e.IndicationObject;
            if (obj is MemoryLocation)
            {
                MemoryLocation loc = (MemoryLocation)obj;
                log.InfoFormat("New message received in storage {0}, index {1}.", loc.Storage, loc.Index);

            }
            else if (obj is ShortMessage)
            {
                ShortMessage msg = (ShortMessage)obj;
                SmsPdu pdu = comm.DecodeReceivedMessage(msg);                  

                //Here can be delivery status or received message so cast to the right type by doing type checks for SmsDeliverPdu or SmsStatusReportPdu


            }
            else
            {
                log.ErrorFormat("Unknown notification message received");
                log.InfoFormat("Message indication object is {0}", e.IndicationObject);
            }
        }
        catch (Exception ex)
        {
            log.ErrorFormat("An error occurred while message ws received. Error: {0}", ex.Message);
            log.Error(ex);
        }

真的,我不知道如何修复它,。。如果你能解决它也许可以和我分享,。。因为我想在我的应用程序中获取交付报告,但我无法。。感谢您也需要教程…您是否介意解释如何使用此DLL启用传递报告通知?您是否介意解释如何使用此DLL启用传递报告通知?请@AcademyofProgrammer您需要在生成SmsSubmitPdu时将此标志设置为true…如下所示:
pdu.RequestStatusReport=true还请注意,当初始化GsmCommMain对象时,在尝试发送消息之前,必须绑定到消息接收事件处理程序
comm=new GsmCommMain(CommPort、CommBaudRate、Timeout);comm.MessageReceived+=comm_MessageReceived