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;
}
}
}
[解决办法]
看看这是不是你想要的