求使用C# serialport接受短信的解决方法,最好有代码
求使用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编码的短信内容
------解决方案--------------------
本人最近需要做一个能收发短信的程序,发送短信已经实现,可是我不会接收短信,困扰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; }