2012-09-05 175 views
2

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

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(); 
      } 
     } 
    } 

请帮我用这段代码!

+0

你遇到什么问题? –

+0

它未发送短信 –

+0

它不发送短信 –

回答

2

你为什么不打开在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)); 
+0

短信你在发送或读取短信的问题? – Cdeez

6

这里是我的代码

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

+0

由于此代码工作在我的诺基亚6630 – motevalizadeh

1

尝试这种方式。你没有打开到串行端口的连接。我试过了,它对我来说工作得很好。

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; 
}