2012-09-05 178 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; 
}