使用GSMMobile的AT指令发短信报错我用GSM手机通过AT指令发短信。我想发送数千条消息。我在GSM手机上读到我们每分钟可以发送6-8条短信。但是当我发送消息时,有些人去了有些人不去。我从excel文件中获取信息意味着目的地号码和消息文本。你能告诉我为什么有些短信可以发送而有些不能发送吗?我的代码是SmsFieldssmsObj=null;列表smsColl=null;串行端口serialport=null;StringBuilderstrbuild=newStringBuilder();try{//验证表单if(!Validation())return;串行端口=新串行端口();////设置串口对象的属性serialport.PortName=cboPort.SelectedItem.ToString();串口.BaudRate=9600;serialport.Parity=Parity.None;串口.DataBits=8;serialport.StopBits=StopBits.One;serialport.Handshake=Handshake.RequestToSend;串行端口.DtrEnable=true;串口.RtsEnable=true;//打开发送短信的端口serialport.Open();//检查端口是否打开if(!serialport.IsOpen){MessageBox.Show("串口未打开,请换其他端口试试");返回;}//创建smsFields类的对象并在通用集合中填充数据smsObj=SmsFields.Instance;smsColl=smsObj.FillData(txtFilePath.Text);if(smsColl==null){MessageBox.Show("在excel表中找不到数据");返回;}//从SmsFields类获取单个记录并发送消息foreach(SmsFieldssmsinsmsColl){//检查手机状态serialport.WriteLine("AT"+Environment.NewLine);//配置消息为SMS(PDU格式为0)和(文本格式为1)serialport.WriteLine("AT+CMGF=1"+Environment.NewLine);//设置消息中心号码serialport.WriteLine("AT+CSCA=""+txtServiceNo.Text+"""+Environment.NewLine);//设置目标号码serialport.WriteLine("AT+CMGS=""+sms.DestinationNo+"""+Environment.NewLine);//指定消息并发送Ctrl+z串口。WriteLine(sms.Message+(char)26);//显示包含输出消息的缓冲区System.Threading.Thread.Sleep(4000);我认为你的问题是你在发送下一个命令之前没有等待最终结果代码(即OK,ERROR和其他一些代码)问题是如果新命令未完成,将触发正在进行的命令的中止。引用V.250:5.6.1中止命令...中止命令是通过从DTE传输到任何角色的DCE来完成的。所以总是在发送AT指令时,必须等待最终的结果码,才能发送下一条指令。我是否建议将serialport.WriteLine("ATxxx"+Environment.NewLine)重构为sendCommand(serialport,"ATxxx")函数?然后,您可以在该函数的末尾添加等待最终结果的代码。尝试查看是否存在未发送消息的模式。因此,消息中的数字格式或无效字符可能存在问题。更多注意事项:您没有进行任何错误检查。我会确保在调用每个命令后得到预期的响应。您正在使用Environment.NewLine来完成每一行。我假设这是一个随底层操作系统而变化的属性。但是,AT标准非常清楚用于终止命令行的确切字符。手机是真正的混蛋。仅仅因为您遵循规范或文档并不意味着他们这样做。假设每个手机型号的行为与其他手机型号不同。见第1点以上为C#学习教程:使用GSM手机AT指令发送短信给出错误分享的全部内容。如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注。本文来自网络收集,不代表立场,如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
