该程序发短信不是很稳定,有时发短信正确,有时又没反应,有时把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 "":
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();
} }
}
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 "":
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();
} }
}
解决方案 »
- c#才新建项目就报错了~!
- C#编写记事本,如何使状态栏显示字数,标题栏显示名称?
- 初学者想实现v3叉切分窗口,怎么弄?可以具体说说吗?
- 刚刚接触XML,想请教怎么样把XML文件(一个XML文件中的数据要放到不同的数据表)中的数据存到数据库中!!!!
- 关于图片下载的问题,为什么图片下载后会出现在程序运行的目录下面?????
- 指定时间执行应用程序?
- 为什么我的sql数据表用text类型后不能存放1000个以上的文字啊 ?
- 请问以下代码编译时出现错误,如何修改?
- 飞信虚拟机VMLoader中程序代码存在process.strart方法时,被360报远程线程注入
- VS2005 录制的宏执行不了了,该怎么修复?
- C#写了个服务程序,启动后又关闭了
- 在C#里 怎样才能把一个字符串转换成类啊
p, Convert.ToInt32(comboBox3.Text), sb);
//初始化串口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)//点击发送按钮向串口写AT指令发送短信
{
sp.Write("AT+CMGF=1\r");
sp.Write("AT+CMGs=\"13316979816\"\r");
sp.Write(this.textBox1.Text + "\x01a");//发送短信息,使用Ctrl+Z结束
}
Threading.Thread.Sleep(50)
.....
一定要判断返回值,貌似有些指令是等返回值读取以后才继续执行的
而且实际使用的时候,由于网络问题,指令执行情况也千奇百怪的
很久没弄了,之前也没彻底弄明白过,仅供参考~
private void button2_Click(object sender, EventArgs e)//点击发送按钮向串口写AT指令发送短信
{
int n= sp.Write( "AT+CMGF=1\r ");
if n>0
int b=sp.Write( "AT+CMGs=\ "13316979816\ "\r ");
if b>0
sp.Write(this.textBox1.Text + "\x01a ");//发送短信息,使用Ctrl+Z结束
}
using System.IO.Ports;
using System.Threading;public class PortChat
{
static bool _continue;
static SerialPort _serialPort; public static void Main()
{
try
{
string name;
string message;
StringComparer stringComparer = StringComparer.OrdinalIgnoreCase;
Thread readThread = new Thread( Read ); // Create a new SerialPort object with default settings.
_serialPort = new SerialPort(); // Allow the user to set the appropriate properties.
//_serialPort.PortName = SetPortName( _serialPort.PortName );
//_serialPort.BaudRate = SetPortBaudRate( _serialPort.BaudRate );
//_serialPort.Parity = SetPortParity( _serialPort.Parity );
//_serialPort.DataBits = SetPortDataBits( _serialPort.DataBits );
//_serialPort.StopBits = SetPortStopBits( _serialPort.StopBits );
//_serialPort.Handshake = SetPortHandshake( _serialPort.Handshake ); // Set the read/write timeouts
_serialPort.ReadTimeout = 5000;
_serialPort.WriteTimeout = 500; _serialPort.Open();
_continue = true;
readThread.Start(); Console.Write( "Name: " );
name = Console.ReadLine(); Console.WriteLine( "Type QUIT to exit" ); while( _continue )
{
message = Console.ReadLine(); if( stringComparer.Equals( "quit", message ) )
{
_continue = false;
}
else
{
_serialPort.WriteLine(
String.Format( "<{0}>: {1}", name, message ) );
}
} readThread.Join();
_serialPort.Close();
}
catch( Exception ex )
{
Console.WriteLine( ex.Message );
}
} public static void Read()
{
while( _continue )
{
try
{
string message = _serialPort.ReadLine();
Console.WriteLine( message );
}
catch( TimeoutException )
{
}
}
} public static string SetPortName( string defaultPortName )
{
string portName; Console.WriteLine( "Available Ports:" );
foreach( string s in SerialPort.GetPortNames() )
{
Console.WriteLine( " {0}", s );
} Console.Write( "COM port({0}): ", defaultPortName );
portName = Console.ReadLine(); if( portName == "" )
{
portName = defaultPortName;
}
return portName;
} public static int SetPortBaudRate( int defaultPortBaudRate )
{
string baudRate; Console.Write( "Baud Rate({0}): ", defaultPortBaudRate );
baudRate = Console.ReadLine(); if( baudRate == "" )
{
baudRate = defaultPortBaudRate.ToString();
} return int.Parse( baudRate );
} public static Parity SetPortParity( Parity defaultPortParity )
{
string parity; Console.WriteLine( "Available Parity options:" );
foreach( string s in Enum.GetNames( typeof( Parity ) ) )
{
Console.WriteLine( " {0}", s );
} Console.Write( "Parity({0}):", defaultPortParity.ToString() );
parity = Console.ReadLine(); if( parity == "" )
{
parity = defaultPortParity.ToString();
} return ( Parity )Enum.Parse( typeof( Parity ), parity );
} public static int SetPortDataBits( int defaultPortDataBits )
{
string dataBits; Console.Write( "Data Bits({0}): ", defaultPortDataBits );
dataBits = Console.ReadLine(); if( dataBits == "" )
{
dataBits = defaultPortDataBits.ToString();
} return int.Parse( dataBits );
} public static StopBits SetPortStopBits( StopBits defaultPortStopBits )
{
string stopBits; Console.WriteLine( "Available Stop Bits options:" );
foreach( string s in Enum.GetNames( typeof( StopBits ) ) )
{
Console.WriteLine( " {0}", s );
} Console.Write( "Stop Bits({0}):", defaultPortStopBits.ToString() );
stopBits = Console.ReadLine(); if( stopBits == "" )
{
stopBits = defaultPortStopBits.ToString();
} return ( StopBits )Enum.Parse( typeof( StopBits ), stopBits );
} public static Handshake SetPortHandshake( Handshake defaultPortHandshake )
{
string handshake; Console.WriteLine( "Available Handshake options:" );
foreach( string s in Enum.GetNames( typeof( Handshake ) ) )
{
Console.WriteLine( " {0}", s );
} Console.Write( "Stop Bits({0}):", defaultPortHandshake.ToString() );
handshake = Console.ReadLine(); if( handshake == "" )
{
handshake = defaultPortHandshake.ToString();
} return ( Handshake )Enum.Parse( typeof( Handshake ), handshake );
}
}找了个例子,看看哦
我觉得造成有时好用又是不好用的主要原因应该是指令发送间隔不够。把时间调长一点试一试
之前有实现过用 Delphi 开发短信程序!!
是要有延时的,AT命令发送后会有返回值。
看看这个吧,我也遇到了。
还是好好看看短信模块的sdk吧,一般都提供测试程序或者demo的。