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