我想接收从控制台上的GSM调制解调器发送的每条消息,因为我使用了DataReceivedHandler。我的问题是在控制台上总是收到一次消息,以便接收另一条消息我必须调试我的控制台应用程序,这意味着我的处理程序无法正常工作。 还有一个问题是我已经使用pduconverter.dll将接收的pdu格式消息转换为文本格式,来自pduconverter.dll的例程我得到时间戳,消息文本但无法获取发件人的号码。这是我的代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO.Ports;
using System.Data.Sql;
using System.Data.SqlClient;
using GsmComm.PduConverter;
namespace readSerialData
{
class Program
{
static void Main(string[] args)
{
SerialPort serialport = new SerialPort();
int mSpeed = 1;
serialport.PortName = "COM16";
serialport.BaudRate = 9600;
serialport.Parity = Parity.None;
serialport.DataBits = 8;
serialport.StopBits = StopBits.One;
serialport.Handshake = Handshake.XOnXOff;
serialport.DtrEnable = true;
serialport.RtsEnable = true;
serialport.NewLine = Environment.NewLine;
serialport.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);
serialport.Open();
Console.ReadKey();
serialport.Close();
}
private static void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
{
SerialPort sp = (SerialPort)sender;
sp.WriteLine("AT+CNMI=1,2,0,0\r");
sp.WriteLine("AT+CMGL=4\r");
string indata = sp.ReadExisting();
Console.WriteLine("Data Received:");
string sub = indata.Substring(indata.IndexOf('0'), indata.Length - indata.IndexOf('0'));
IncomingSmsPdu sms = GsmComm.PduConverter.IncomingSmsPdu.Decode(sub, true);
Console.WriteLine(sms.SmscAddress);
Console.WriteLine(sms.UserDataText);
Console.WriteLine(sms.GetTimestamp());
Console.ReadKey();
Console.ReadKey();
}
}
}
请帮助,我已经被困住了很多天。
答案 0 :(得分:0)
在Main
方法中,Console.ReadKey()用于接受键击以退出程序,但为什么在DataReceivedHandler
中使用它?
如果没有按键,DataReceivedHandler将永远不会返回。我猜这是你问题的原因。从DataReceivedHandler
中移除它们以查看是否可以解决您的问题。
private static void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
{
...
Console.WriteLine(sms.GetTimestamp());
//Console.ReadKey();
//Console.ReadKey();
}