C# 用于发送sms的AT命令之间的时间延迟

C# 用于发送sms的AT命令之间的时间延迟,c#,gsm,at-command,C#,Gsm,At Command,我正在开发一个通过GSM调制解调器发送SMS的应用程序,我使用AT命令来实现这一点当我调试应用程序时,sms会发送到Receiver,但当我运行应用程序时,sms不会发送到Receiver。 我的代码如下,我的gsm调制解调器是D-Link DWM-156。 我的代码有错误吗? 谢谢 if(运动等参) { int i = 0; while (i < msgs.Count) { SPort

我正在开发一个通过GSM调制解调器发送SMS的应用程序,我使用AT命令来实现这一点当我调试应用程序时,sms会发送到Receiver,但当我运行应用程序时,sms不会发送到Receiver。 我的代码如下,我的gsm调制解调器是D-Link DWM-156。 我的代码有错误吗? 谢谢

if(运动等参) {

            int i = 0;
            while (i < msgs.Count)
            {
                SPort.DiscardInBuffer();
                System.Threading.Thread.Sleep(1000);
                var res = SPort.ReadExisting();
                SPort.DiscardOutBuffer();
                System.Threading.Thread.Sleep(1000);

                SPort.Write("AT\r");
                System.Threading.Thread.Sleep(1000);
                while ((res = SPort.ReadExisting()).Contains("ERROR")) ;
                resultResponse += "1" + res + "---";

                SPort.Write("AT+CMGF=0\r");
                System.Threading.Thread.Sleep(100);
                while ((res = SPort.ReadExisting()).Contains("ERROR")) ;
                resultResponse += "2" + res + "---";
                SPort.Write("AT+CSCS=\"HEX\"\r");//char set
                System.Threading.Thread.Sleep(100);
                while ((res = SPort.ReadExisting()).Contains("ERROR")) ;
                resultResponse += "3" + res + "---";

                SPort.Write("AT+CSMP=17,71,0,17\r");
                System.Threading.Thread.Sleep(100);
                while ((res = SPort.ReadExisting()).Contains("ERROR")) ;
                resultResponse += "4" + res + "---";

                string hexString = msgs[i];

                SPort.Write(string.Format("AT+CMGS={0}\r", (hexString.Length - 16) / 2));
                System.Threading.Thread.Sleep(100);
                while ((res = SPort.ReadExisting()).Contains("ERROR")) ;
                resultResponse += "5" + res + "---";

                SPort.Write(string.Format("{0}{1}\n", hexString, Convert.ToChar(26)));
                System.Threading.Thread.Sleep(100);
                while ((res = SPort.ReadExisting()).Contains("ERROR")) ;
                resultResponse += "6" + res + "---";

                System.Threading.Thread.Sleep(1500);
                response += res;
                i++;
            }

        }
inti=0;
而(i
我的代码有错误吗

是的,你需要稍微修改一下你的响应处理,但实际上你已经很接近了(而且比我看到一个叫睡眠的呼叫时最初以为你正在使用的不幸的、并不罕见的发送睡眠模式要好得多)。而且您正确地使用了
\r
在命令行终止,所以这是一个好的开始

在发送AT命令后,您应该不断地(一次又一次地)读取调制解调器的响应线,直到获得最终结果代码(使用
包含(“错误”)
不够好)。有关代码流结构和函数参考,请参阅,以确定行是否为最终结果代码

您可以在发送命令行和开始读取响应之间保持100毫秒的延迟;事实上,我最近在我的程序中增加了200毫秒(本地,尚未发布)


对于
AT+CMGS
命令,您必须等到收到
“\r\n>”
字符串后才能发送任何有效负载数据(也包含在上面链接的答案中)。

感谢您的有用回答,但是我还没有完成我的程序,我也有同样的问题。关于您的问题回答:如果我收到“错误”回答,我该怎么办??我应该重新发送相同的命令吗??我应该取消相同的SMS命令并重新启动吗??