用c#程序发短信的入门问题,想助者百分相送!
我最近做一个用c#程序发短信的项目,使用微软的MSCOM控件,硬件用短信猫。现在的问题是程序里面执行AT指令后读不到返回结果,input为空。开始一直以为是指令没有成功执行,后来打开超级终端,以前程序执行的结果就都在超级终端上显示出来了。我实在是找不到原因,第一次做串口编程,目前阶段只是想简单的发AT指令再接收结果,可就是达不到效果,希望大家有作过的帮我找下原因,百分以上相送。
private void btnCnn_Click(object sender, System.EventArgs e)
{
lblcnnInfo.Text = "";
btnClose.Enabled = false;
if (MSCOMM.PortOpen)
{
MessageBox.Show("端口已打开!", "提示信息");
}
else
{
MSCOMM.PortOpen = true;
lblcnnInfo.Text = "COM1已打开!";
}
MSCOMM.InBufferCount = 0;
string strTemp = "AT\r";
int T = Environment.TickCount;
int L;
string Buffer = "";
MSCOMM.Output = strTemp;
do
{
System.Windows.Forms.Application.DoEvents();
Console.WriteLine(Environment.TickCount - T);
lblcnnInfo.Text = "COM1 已打开," + "\r" + "正在连接手机 ...";
MSCOMM.InputMode = MSCommLib.InputModeConstants.comInputModeText;
//这个地方无论是text还是binary都用过了,还是不行
while (MSCOMM.InBufferCount < 1)
System.Windows.Forms.Application.DoEvents(); ;
string d = MSCOMM.Input.ToString();
Buffer += MSCOMM.Input;
L = Buffer.IndexOf("OK\r\n");
}
while (L == -1 && Environment.TickCount - T <= 2500);
if (L != -1)
{
btnCnn.Enabled = false;
btnClose.Enabled = true;
btnSendSMS.Enabled = true;
lblcnnInfo.Text = "COM1 已打开," + (char)13 + "连接手机成功!";
}
------解决方案--------------------用System.IO.Ports.SerialPort吧,C#的串口控件,在接收事件里面接收
private void serialPortChafen_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
byte[] buf = new byte[8];
int len = ((System.IO.Ports.SerialPort)sender).Read(buf, 0, 8);
}
------解决方案--------------------串口通讯不是同步进行的。你往串口写数据,必须延迟一会儿,在从串口里面读回应数据。
具体回应时间长短你在程序重测试。
------解决方案--------------------使用vs2005中的serialPort控件吧
------解决方案--------------------写玩数据后,让主线程休眠一段时间Thread.Sleep(n),然后再读数据。
------解决方案--------------------没有开发过,关注中
------解决方案--------------------每写完一个AT命令,必须加上ctrl+Z作为命令的结束符,否则COM口永远在等待命令的结束。
另外,直接用端口操作更加方便吧。