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

求使用C# serialport接受短信的解决办法,最好有代码!
本人最近需要做一个能收发短信的程序,发送短信已经实现,可是我不会接收短信,困扰2天了,求各位老大帮个忙,先谢谢了。

 现在来短信后只能只能在界面上提示有新短信,实现代码如下
  Thread.Sleep(500);
  strTemp = serialport1.ReadExisting(); 
  if (strTemp.ToUpper().Contains("+CMTI:"))
  {
  this.Invoke(interfaceUpdataHandle, "有新短信");
  return;
  }
可是怎么读取短信内容呢?
使用 AT+CMGR= XX (XX为数字)读取短信内容,为什么老出错呢?
会出现 +CMS ERROR: 321 错误
 或者 +CME ERROR: 65536014 错误
怎么办?


------解决方案--------------------
你发送AT+CNMI=?之后把结果贴一下,看看你的模块是不是可以直接将消息转发到TE,如果可以的话不用每次从SIM卡读取。
------解决方案--------------------
在初始化后先发送AT+CNMI=2,2,0,0,0
使串口保持读取状态,然后给短信猫发送一条短信,看看短信内容能否直接被串口接收到.收到的短信内容应该是以0891开头.
------解决方案--------------------
07683108304745F3000D9168
8137183822F6----电话号码
0008----中文短信
2170020102----时间
3023
18----短信长度
4F60597D597D8FD80020521A521A597D597D597D5E724E56-----BigEndianUnicode编码的短信内容
------解决方案--------------------
C# code

        static void Main(string[] args)
        {
            DateTime dt = fsshijian("2170020102");
            Console.WriteLine(dt);
            string s = "4F60597D597D8FD80020521A521A597D597D597D5E724E56";
            byte[] b = new byte[24];
            for (int i = 0; i < 24; i++)
                b[i] = Convert.ToByte(s.Substring(i * 2, 2), 16);
            string mmsg = Encoding.BigEndianUnicode.GetString(b);
            Console.WriteLine(mmsg);
            Console.ReadLine();
        }
        static DateTime fsshijian(string sj)
        {
            DateTime dt = new DateTime();
            if (sj.Length == 10)
            {
                char* ca = stackalloc char[16];
                ca[0] = '2';
                ca[1] = '0';
                ca[2] = sj[1];
                ca[3] = sj[0];
                ca[4] = '/';
                ca[5] = sj[3];
                ca[6] = sj[2];
                ca[7] = '/';
                ca[8] = sj[5];
                ca[9] = sj[4];
                ca[10] = ' ';
                ca[11] = sj[7];
                ca[12] = sj[6];
                ca[13] = ':';
                ca[14] = sj[9];
                ca[15] = sj[8];
                DateTime.TryParse(new string(ca, 0, 16), out dt);
            }
            return dt;
        }