Nhận SMS thông qua GSM modem bang C#using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using System.IO.Ports; using MySql.Data.
Trang 1Nhận SMS thông qua GSM modem bang C#
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.IO.Ports;
using MySql.Data.MySqlClient;
namespace sending_and_receive_SMS
{
class Program
{
static AutoResetEvent readNow = new AutoResetEvent(false);
static SerialPort port;
static string[] mang;
static string[] mang1;
static string content_SMS;
static string thisrow = "";
static MySqlConnection connect;
static void Main(string[] args)
{
try
{
port = EstablishConnection();//thuc hien ket noi cong COM
do
{
string receivedData = ExecuteCommand("AT", 300);//thuc hien lenh AT
receivedData = ExecuteCommand("AT+CMGL=" + (char)34 + "REC UNREAD" + (char)34, 300);
mang = receivedData.Split('"');//tach du lieu nhan ve
console.WriteLine(receiveData);
console.ReadKey();
} while (mang[2].Contains("OK"));// dieu kieu de bit khi nao co du lieu trong buffer
console.WriteLine("gia tri nhan dc la " , receivedData)
}
catch (Exception e)
{
Console.WriteLine("Error Mes: " + e.Message.Trim() + "\r\nPress any key to exit ");
Console.ReadLine();
}
finally
{
if (port != null)
{
port.Close();
port.DataReceived -= new SerialDataReceivedEventHandler(DataReceived);
port = null;
}
}
}
static string ExecuteCommand(string command,int timeout)//ham thuc hien chuc nag gui lenh
AT vo cong COM
{
Trang 2port.DiscardOutBuffer();
readNow.Reset();
port.Write(command + "\r");
string received = receive(timeout);
return received;
}
static string receive(int timeout)//ham nhan du lieu tra ve tu buffer
{
string buffer = string.Empty;
do
{
if (readNow.WaitOne(timeout, false))
{
string t = port.ReadExisting();
buffer += t;
}
}
while (!buffer.EndsWith("\r\nOK\r\n") && !buffer.EndsWith("\r\n>") && !
buffer.Contains("ERROR"));
return buffer;
}
static SerialPort EstablishConnection()//Thiet lap thong so cho cong COM
{
SerialPort port = new SerialPort();
port.PortName = "COM1";
port.BaudRate = 115200;
port.DataBits = 8;
port.StopBits = StopBits.One;
port.Parity = Parity.None;
port.ReadTimeout = 300;
port.WriteTimeout = 300;
port.Handshake = Handshake.RequestToSend;
port.Encoding = Encoding.GetEncoding("iso-8859-1");
port.DataReceived += new SerialDataReceivedEventHandler(DataReceived);
port.Open();
port.DtrEnable = true;
return port;
}
static void DataReceived(object sender,SerialDataReceivedEventArgs e)
{
if (e.EventType == SerialData.Chars)
readNow.Set();
}
Code trên mình thực hiện việc nhân tin SMS thông qua GSM modem.Hiên tại thi vòng lặp do while đang thực hiện chưa đung ý mình (khi có dữ liệu ,tin SMS đến thì vòng lặp sẽ bị break .sau đó thưc hiện lệnh sau của chương trình)).Tuy nhiên hiên tại thi khi dữ liệu đến thì vòng lặp bị break nhưng không thực hiện các lệnh sau đó.Mình đã thử bỏ vòng lặp Do while ra thi chuong trinh hoat dộng binh thươg.MONG CAC BAN DA TUNG LAM VE KẾT NỐI CỎNG COM BẰNG c # GIUP DO MINH VỚI