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

用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口永远在等待命令的结束。

另外,直接用端口操作更加方便吧。