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

c#通过串口发短信,每次打开串口总死,不知道为什么解决方法

2012-01-31 
c#通过串口发短信,每次打开串口总死,不知道为什么using Systemusing System.Collections.Genericusing S

c#通过串口发短信,每次打开串口总死,不知道为什么
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using SZCASIC.JC.client.configure;
using System.Collections;
using System.IO.Ports;

namespace MultiLangTest
{
  public partial class SerialPortTest : Form
  {

  private SerialPort sp;
  public SerialPortTest()
  {
  InitializeComponent();
  }

  private void SerialPortTest_Load(object sender, EventArgs e)
  {
  //OuterDevice.getDeviceInfo("ICCard");
  //Hashtable ht = new Hashtable();
  //ht.Add("Port", "USB");
  //ht.Add("type", "usb1");
  //ht.Add("rate", "19200");
  //OuterDevice.setDeviceInfo("ICCard", ht);
  IList list = OuterDevice.getComDataInfo("COM");
  this.comboBox1.DataSource = list[0];
  this.comboBox2.DataSource = list[1];
  this.comboBox5.DataSource = list[2];
  this.comboBox3.DataSource = list[3];
  this.comboBox4.DataSource = list[4];  
  this.comboBox6.DataSource = list[5];
  this.comboBox4.Text = this.comboBox4.Items[1] as string;
  }

  private void button3_Click(object sender, EventArgs e)
  {

  }

  private void button1_Click(object sender, EventArgs e)
  {
  Parity p = Parity.Even;
  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();
  }
  try
  {
  sp.Open();


  }
  catch (UnauthorizedAccessException ex)
  {
  MessageBox.Show("错误:" + ex.Message);
  return;
  }

  if (sp.IsOpen)
  {
  Boolean Connected = false;
  sp.Write("AT+CMGF=1\r"); //设置为文本模式
  byte[] buffer = new byte[1024];
  sp.Read(buffer, 0, 1024);
  string response = Encoding.ASCII.GetString(buffer);
  response = response.Trim('\0');
   if (response.Length > 0)
   {
    this.textBox2.Text = response.Substring(10,7);
    Connected = true;
   }
   else
   {
    textBox2.Text = "与手机连接不成功";
    Connected = false;
   }

  sp.Write("AT+CGMI\r"); //获取手机品牌
  sp.Read(buffer, 0, 1024);
  response = Encoding.ASCII.GetString(buffer);
  response = response.Trim('\0');
   if (response.Length > 0)
   {
    this.textBox2.Text = response.Substring(10,7);
    Connected = true;
   }
   else
   {
    textBox2.Text = "与手机连接不成功";
    Connected = false;
   }
  sp.Write("AT+CGMM\r");//获取手机型号
  sp.Read(buffer, 0, 1024);
  response = Encoding.ASCII.GetString(buffer);
  response = response.Trim('\0');
   if(response.Length > 0)
   {
    textBox2.Text = textBox2.Text+ " " + response.Substring(10,5) + " 连接中......";
    Connected = true;
   }
   else
   {
    textBox2.Text = "与手机连接不成功";
    Connected = false;
   }
   sp.Write("AT+CSCA?\r");//获取手机短信中心号
  sp.Read(buffer, 0, 1024);
  response = Encoding.ASCII.GetString(buffer);
  response = response.Trim('\0');
   if(response.Length > 0)
   {
  textBox2.Text = response.Substring(20, 13);
    Connected = true;
   }
   else
   {
    Connected = false;
   }
  //if (Connected == true)
  //{
  // btnConnect.Enabled = false;
  // btnSend.Enabled = true;
  //}
  //else
  //{
  // btnConnect.Enabled = true;
  // btnSend.Enabled = false;
  //}
  }
  }

  private void ReadSMSData(object sender, SerialDataReceivedEventArgs e)
  {
  byte[] buffer = new byte[1024];
  sp.Read(buffer, 0, 1024);
  string response = Encoding.ASCII.GetString(buffer);
  response = response.Trim('\0');
  this.textBox2.Text += response + "\r\n";
  }

  private void button2_Click(object sender, EventArgs e)
  {
  //string decodedSMS = sms.smsDecodedsms(CenterNumber.Text,targetNumber.Text,smsContent.Text);
  //byte[] buf = Encoding.ASCII.GetBytes(String.Format("AT+CMGS={0}\r",sms.nLength));


  byte[] buffer = new byte[1024];
   
  string SendState = "";
  sp.Write("AT+CMGs=\"13902480892\"\r"); //设置对方手机号码
  sp.Read(buffer, 0, 1024);
  string response = Encoding.ASCII.GetString(buffer);
  response = response.Trim('\0');
  if( response.Length > 0 && response.EndsWith("> "))
  {
   sp.Write(this.textBox1.Text + "{0}\x01a"); //发送短信息,使用Ctrl+Z结束
   SendState = "发送成功!";
  }
  else
  {
   SendState = "发送失败";
  }
  string Result = String.Format("13902480892,{0},{1},\n\r", textBox1.Text, SendState);
  textBox2.Text += Result;
  }
  }
}

[解决办法]

看看这是不是你想要的

热点排行