AT命令发送/接收SMS

我是AT命令的新手。 我正在使用诺基亚E71发送和接收短信。 我正在设计一个发送短信的应用程序,但我的代码无效。

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.IO.Ports; using System.Threading; namespace AT_commands { public partial class Form1 : Form { SerialPort serialPort; public Form1() { InitializeComponent(); } public void Form1_Load(object sender, EventArgs e) { this.serialPort = new SerialPort(); this.serialPort.PortName = "COM23"; this.serialPort.BaudRate = 9600; this.serialPort.Parity = Parity.None; this.serialPort.DataBits = 8; this.serialPort.StopBits = StopBits.One; this.serialPort.Handshake = Handshake.RequestToSend; this.serialPort.DtrEnable = true; this.serialPort.RtsEnable = true; this.serialPort.NewLine = System.Environment.NewLine; send_sms(); } public bool send_sms() { label1.Text = "Loaded Successfuly"; String SMSMessage = "Message to send"; String CellNumber = "+923333333333"; String messageToSend = null; if (SMSMessage.Length <= 160) { messageToSend = SMSMessage; } else { messageToSend = SMSMessage.Substring(0, 160); } if (this.IsOpen == true) { this.serialPort.WriteLine(@"AT" + (char)(13)); Thread.Sleep(200); this.serialPort.WriteLine("AT+CMGF=1" + (char)(13)); Thread.Sleep(200); this.serialPort.WriteLine(@"AT+CMGS=""" + CellNumber + @"""" + (char)(13)); Thread.Sleep(200); this.serialPort.WriteLine(SMSMessage + (char)(26)); return true; } return false; } public void Open() { if (this.IsOpen == false) { this.serialPort.Open(); } } public void Close() { if (this.IsOpen == true) { this.serialPort.Close(); } } public bool IsOpen { get { return this.serialPort.IsOpen; } } public void Dispose() { if (this.IsOpen) this.Close(); } } } 

请帮我这个代码!

这是我的代码

 using System; using System.IO.Ports; using System.Threading; using System.Windows.Forms; namespace CSharp_SMS { public partial class Form_SMS_Sender : Form { private SerialPort _serialPort; public Form_SMS_Sender() { InitializeComponent(); } private void buttonSend_Click(object sender, EventArgs e) { string number = textBoxNumber.Text; string message = textBoxMessage.Text; //Replace "COM7"withcorresponding port name _serialPort = new SerialPort("COM7", 115200); Thread.Sleep(1000); _serialPort.Open(); Thread.Sleep(1000); _serialPort.Write("AT+CMGF=1\r"); Thread.Sleep(1000); _serialPort.Write("AT+CMGS=\"" + number + "\"\r\n"); Thread.Sleep(1000); _serialPort.Write(message + "\x1A"); Thread.Sleep(1000); labelStatus.Text = "Status: Message sent"; _serialPort.Close(); } } } 

这是一个链接http://circuitfreak.blogspot.com/2013/03/c-programming-sending-sms-using-at.html

为什么不在form_load()本身打开端口连接,以后可以像以前那样在最后关闭它。

并在Form_Load()中执行这些操作:

 string cmd = "AT"; port.WriteLine(cmd + "\r"); port.Write(cmd + "\r"); port.WriteLine("AT+CMGF=1"); 

并简化短信发送代码:

 port.WriteLine("AT+CMGS=\"" + PhNumber + "\""); port.Write(Message + char.ConvertFromUtf32(26)); 

试试这种方式..你没有打开到串口的连接。 我试过了,它对我来说很好。

  private void button1_Click(object sender, EventArgs e) { this.serialPort = new SerialPort(); this.serialPort.PortName = "COM5"; this.serialPort.BaudRate = 9600; this.serialPort.Parity = Parity.None; this.serialPort.DataBits = 8; this.serialPort.StopBits = StopBits.One; this.serialPort.Handshake = Handshake.RequestToSend; this.serialPort.DtrEnable = true; this.serialPort.RtsEnable = true; this.serialPort.NewLine = System.Environment.NewLine; serialPort.Open(); send_sms(); } public bool send_sms() { String SMSMessage = "gsm MESSAGE FROM .NET C#"; String CellNumber = "+9233333333333"; String messageToSend = null; if (SMSMessage.Length <= 160) { messageToSend = SMSMessage; } else { messageToSend = SMSMessage.Substring(0, 160); } if (serialPort.IsOpen) { this.serialPort.WriteLine(@"AT" + (char)(13)); Thread.Sleep(200); this.serialPort.WriteLine("AT+CMGF=1" + (char)(13)); Thread.Sleep(200); this.serialPort.WriteLine(@"AT+CMGS=""" + CellNumber + @"""" + (char)(13)); Thread.Sleep(200); this.serialPort.WriteLine(SMSMessage + (char)(26)); return true; } return false; }