日期:2014-05-18  浏览次数:20722 次

我问个AT指令操作短信猫读取所有短信的
C# code

        private void button1_Click(object sender, EventArgs e)
        {
            this.GetSMS();
        }

        public string GetSMS()
        {
            System.IO.Ports.SerialPort sp = new System.IO.Ports.SerialPort("COM1", 9600);
            sp.Open();
            sp.DiscardInBuffer();
            sp.Write("at+cmgl=\"ALL\"\r");
            sp.DiscardInBuffer();
            int tick = Environment.TickCount;
            int timeout = 60000;
            bool at_finish = false;
            StringBuilder sb = new StringBuilder();
            while (Environment.TickCount - tick < timeout && !at_finish)
            {
                sb.Append(sp.ReadExisting());
            }
            sp.Close();
            string result = sb.ToString();
            return result;
        }


我用这个代码想先得到短信列表,但是只得到了第一条,有时候竟然为空字符串。
可是我用超级终端执行这个命令总共是有三条数据的,你知道只是为什么吗?



下面是超级终端的结果:
C# code

at+cmgl="ALL"
+CMGL: 1,"REC READ","10658830",,"10/11/07,17:49:46+32"
(一些内容,略)
+CMGL: 2,"REC READ","10658300",,"10/11/07,17:49:11+32"
(一些内容,略)
+CMGL: 3,"REC READ","10086",,"10/11/07,17:50:36+32"
(一些内容,略)

OK




下面是调试的时候的结果:
C# code

at+cmgl="ALL" +CMGL: 1,"REC READ","10658830",,"10/11/07,17:49:46+32"
(一些内容,略)



------解决方案--------------------
实在不行,你试下sp.Write的参数中传数组,接收也用数组

------解决方案--------------------
ReadExisting就是你读串口的方法怎么写的?
------解决方案--------------------
都是高人
------解决方案--------------------
个人觉得应该一直读,不要想象调用一次read方法,就能得到完整的想要的内容,一定要根据结束的字符来判断。
------解决方案--------------------
哦,看到了。要不你把超时设置长点,先跟踪下程序?
------解决方案--------------------
DataReceived中接收