首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

c#写的通过串口写AT指令发短信的程序,大家帮忙看看!解决方案

2012-06-05 
c#写的通过串口写AT指令发短信的程序,大家帮忙看看!该程序发短信不是很稳定,有时发短信正确,有时又没反应,

c#写的通过串口写AT指令发短信的程序,大家帮忙看看!
该程序发短信不是很稳定,有时发短信正确,有时又没反应,有时把AT指令一起发了! 不知道什么原因!
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Collections;
using System.IO.Ports;

namespace MultiLangTest
{
  public partial class SerialPortTest : Form
  {
  private SerialPort sp;
  public SerialPortTest()
  {
  InitializeComponent();
  }



  private void button1_Click(object sender, EventArgs e)
  {
  Parity p = Parity.None;
  switch (comboBox5.Text.ToLower())
  {
  case "none":
  p = Parity.None;
  break;
  case "odd":
  p = Parity.Odd;
  break;
  case "even":
  p = Parity.Even;
  break;
  case "mark":
  p = Parity.Mark;
  break;
  case "space":
  p = Parity.Space;
  break;
  default:
  break;
  }
  StopBits sb = StopBits.None;
  switch (comboBox4.Text.ToLower())
  {
  case "1":
  sb = StopBits.One;
  break;
  case "1.5":
  sb = StopBits.OnePointFive;
  break;
  case "2":
  sb = StopBits.Two;
  break;
  default:
  break;
  }

  sp = new SerialPort(comboBox1.Text, Convert.ToInt32(comboBox2.Text),
  p, Convert.ToInt32(comboBox3.Text), sb);

  //sp.DataReceived += new SerialDataReceivedEventHandler(this.ReadSMSData);

  if (sp.IsOpen)
  {
  //MessageBox.Show(string.Format("{0} 串口已经打开", comboBox1.Text));
  sp.Close();
  sp.Open();
  }
  try
  {
  sp.Open();
  }
  catch (UnauthorizedAccessException ex)
  {
  MessageBox.Show("错误:" + ex.Message);
  return;
  }
  }
  private void button2_Click(object sender, EventArgs e)
  {
   
  sp.Write("AT+CMGF=1\r"); 
  sp.Write("AT+CMGs=\"13316979816\"\r"); 
  sp.Write(this.textBox1.Text + "\x01a");//发送短信息,使用Ctrl+Z结束
  }

  private void groupBox1_Enter(object sender, EventArgs e)
  {

  }

  private void label8_Click(object sender, EventArgs e)
  {

  }

  private void textBox3_TextChanged(object sender, EventArgs e)
  {

  }

  private void comboBox3_SelectedIndexChanged(object sender, EventArgs e)
  {

  }



  private void comboBox6_SelectedIndexChanged(object sender, EventArgs e)
  {

  }

  private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
  {

  }

  private void comboBox2_SelectedIndexChanged(object sender, EventArgs e)
  {

  }

  private void comboBox5_SelectedIndexChanged(object sender, EventArgs e)
  {

  }

  private void groupBox1_Enter_1(object sender, EventArgs e)
  {

  }

  private void textBox1_TextChanged(object sender, EventArgs e)
  {

  }

  private void textBox2_TextChanged(object sender, EventArgs e)
  {

  }

 

  private void comboBox1_SelectedIndexChanged_1(object sender, EventArgs e)
  {

  }

  private void button4_Click_1(object sender, EventArgs e)
  {
  sp.Close();
  Application.Exit();
  }

  }
}

[解决办法]
不是Write的,而是AT指令的返回值,比如AT+CMGF=1要返回一个OK,你得处理这个OK之后才去做别的

热点排行