.DefaultTimeout; 
PortAccess.Output(888, 0); 
frmConnection dlg = newfrmConnection(); 
 dlg.StartPosition = FormStartPosition.CenterScreen; 
 dlg.SetData(port, baudRate, timeout); 
if (dlg.ShowDialog(this) == DialogResult.OK) 
 { 
 dlg.GetData(out port, out baudRate, out timeout); 
CommSetting.Comm_Port = port; 
CommSetting.Comm_BaudRate = baudRate; 
CommSetting.Comm_TimeOut = timeout; 
 } 
else 
 { 
 Close(); 
return; 
 } 
Cursor.Current = Cursors.WaitCursor; 
CommSetting.comm = newGsmCommMain(port, baudRate, timeout); 
Cursor.Current = Cursors.Default; 
CommSetting.comm.PhoneConnected += newEventHandler(comm_PhoneConnected); 
//thông báo khi có tin nhắn mới 
CommSetting.comm.MessageReceived += 
newMessageReceivedEventHandler(comm_MessageReceived); 
//comm.MessageReceived += new 
MessageReceivedEventHandler(comm_MessageReceived) 
//CommSetting.comm.EnableMessageNotifications(); 
//CommSetting.comm.EnableMessageNotifications(); 
//CommSetting.comm.EnableMessageRouting(); 
 Output("Message notifications activated."); 
 Output(""); 
Cursor.Current = Cursors.Default; 
bool retry; 
do 
 { 
 retry = false; 
try 
 { 
Cursor.Current = Cursors.WaitCursor; 
CommSetting.comm.Open(); 
Cursor.Current = Cursors.Default; 
 } 
catch (Exception) 
 { 
Cursor.Current = Cursors.Default; 
if (MessageBox.Show(this, "Unable to open the port.", "Error", 
MessageBoxButtons.RetryCancel, MessageBoxIcon.Warning) == 
DialogResult.Retry) 
 retry = true; 
else 
 { 
 Close(); 
return; 
 } 
 T r a n g | 132 
Đồ án tốt nghiệp 
 } 
 } 
while (retry); 
 } 
privatedelegatevoidConnectedHandler(bool connected); 
privatevoid OnPhoneConnectionChange(bool connected) 
 { 
 lbl_phone_status.Text = "CONNECTED"; 
 } 
privatevoid comm_MessageReceived(object sender, 
GsmComm.GsmCommunication.MessageReceivedEventArgs e) 
 { 
Cursor.Current = Cursors.WaitCursor; 
try 
 { 
IMessageIndicationObject obj = e.IndicationObject; 
MemoryLocation loc = (MemoryLocation)obj; 
//Output(string.Format("New message received in storage \"{0}\", index 
{1}.", 
// loc.Storage, loc.Index)); 
 index = loc.Index; 
 } 
catch (Exception E) 
 { 
MessageBox.Show("Error occured: " + E.Message); 
 } 
 MessageReceived(); 
 XuLyTinNhan(); 
 GuiTinTraLoi(); 
 noidungTN = ""; 
DecodedShortMessage[] msgs = 
CommSetting.comm.ReadMessages(PhoneMessageStatus.ReceivedUnread, 
PhoneStorageType.Sim); 
foreach (DecodedShortMessage msg in msgs) 
 { 
 Output(string.Format("Message status = {0}, Location = 
{1}/{2}", StatusToString(msg.Status), msg.Storage, msg.Index)); 
 ShowMessage(msg.Data); 
 Output(""); 
if (!(noidungTN == "")) 
 { 
 XuLyTinNhan(); 
 GuiTinTraLoi(); 
 } 
 } 
Cursor.Current = Cursors.Default; 
 } 
privatevoid MessageReceived() 
 { 
DecodedShortMessage message = CommSetting.comm.ReadMessage(index, 
PhoneStorageType.Sim); 
Output(string.Format("Message status = {0}, Location = {1}/{2}", 
StatusToString(message.Status), message.Storage, message.Index)); 
ShowMessage(message.Data); 
SmsDeliverPdu data = (SmsDeliverPdu)message.Data; 
 xNumber = data.OriginatingAddress; 
 noidungTN = data.UserDataText; 
 } 
privatevoid XuLyTinNhan() 
 { 
if (noidungTN.Length>=4) 
 { 
 T r a n g | 133 
Đồ án tốt nghiệp 
string noidung = noidungTN.Substring(0,3); 
string TTGV = noidungTN.Substring(0,5); 
if (noidung == "DT " || TTGV=="TT GV") 
 { 
if (noidung == "DT ") 
 { 
 TraDatabaseHS(); 
 } 
if (TTGV=="TT GV") 
 { 
 TraDatabaseGV(); 
 } 
 } 
else 
 { 
 xMessage = "Cu phap khong dung!"; 
 } 
 } 
else 
 { 
 xMessage = "Cu phap khong dung!"; 
 } 
 } 
/// 
/// Tra database lấy du lieu. 
/// 
privatevoid TraDatabaseHS() 
 { 
 NoiDungTra = noidungTN.Substring(3, 4); 
string conString = @"Provider=Microsoft.JET.OLEDB.4.0;" + @"data 
source=D:\DATA.mdb"; 
OleDbConnection conn = newOleDbConnection(conString); 
try 
 { 
// create an open the connection 
 conn.Open(); 
// create the adapter and fill the DataSet 
OleDbDataAdapter adapter1 = newOleDbDataAdapter("SELECT MSHS, Name, Toan, 
Ly, Hoa FROM Pupils WHERE MSHS = \'" + NoiDungTra + "\'", conn); 
 dataSet1.Clear(); 
int numberOfRowsFeched = adapter1.Fill(dataSet1, "Pupils"); 
if (numberOfRowsFeched > 0) 
 { 
DataTable dt = dataSet1.Tables["Pupils"]; 
 xMessage = "MSHS:" + " " + dt.Rows[0][0] + ", " + 
dt.Rows[0][1] + ": Toan: " + dt.Rows[0][2].ToString() + ", Ly: " + 
dt.Rows[0][3].ToString() + ", Hoa: " + dt.Rows[0][4].ToString(); 
 } 
else 
 { 
 xMessage = "ID not found."; 
 } 
 } 
catch (Exception E) 
 { 
MessageBox.Show("Error occured: " + E.Message); 
 } 
finally 
 { 
 conn.Close(); 
 } 
 T r a n g | 134 
Đồ án tốt nghiệp 
 } 
privatevoid TraDatabaseGV() 
 { 
 NoiDungTra = noidungTN.Substring(3, 5); 
string conString = @"Provider=Microsoft.JET.OLEDB.4.0;" + @"data 
source=D:\DATA.mdb"; 
OleDbConnection conn = newOleDbConnection(conString); 
try 
 { 
// create an open the connection 
 conn.Open(); 
// create the adapter and fill the DataSet 
OleDbDataAdapter adapter1 = newOleDbDataAdapter("SELECT MSGV, Name, HocVi, 
Mobile, Email FROM Teachers WHERE MSGV = \'" + NoiDungTra + "\'", conn); 
 dataSet1.Clear(); 
int numberOfRowsFeched = adapter1.Fill(dataSet1, "Teachers"); 
if (numberOfRowsFeched > 0) 
 { 
DataTable dt = dataSet1.Tables["Teachers"]; 
 xMessage = "MSGV:" + dt.Rows[0][0] + ", " + 
dt.Rows[0][1] + ", Hoc vi: " + dt.Rows[0][2] + ", Mobile: " + dt.Rows[0][3] 
+ ", Email: " + dt.Rows[0][4]; 
 } 
else 
 { 
 xMessage = "ID not found."; 
 } 
 } 
catch (Exception E) 
 { 
MessageBox.Show("Error occured: " + E.Message); 
 } 
finally 
 { 
 conn.Close(); 
 } 
 } 
/// 
/// Gửi tin nhắn trả lời. 
/// 
privatevoid GuiTinTraLoi() 
 { 
try 
 { 
// Send an SMS message 
SmsSubmitPdu pdu; 
string smsc = "+84900000022"; 
 pdu = newSmsSubmitPdu(xMessage, xNumber, smsc); 
CommSetting.comm.SendMessage(pdu); 
 Output("1 Message sent to " + xNumber); 
 Output(""); 
if (index == 10) 
 { 
int index_del; 
 index_del = 1; 
// Delete the message with the specified index from storage 
CommSetting.comm.DeleteMessage(index_del, PhoneStorageType.Sim); 
 index_del = 2; 
// Delete the message with the specified index from storage 
CommSetting.comm.DeleteMessage(index_del, PhoneStorageType.Sim); 
 index_del = 9; 
 T r a n g | 135 
Đồ án tốt nghiệp 
// Delete the message with the specified index from storage 
CommSetting.comm.DeleteMessage(index_del, PhoneStorageType.Sim); 
 index_del = 10; 
// Delete the message with the specified index from storage 
CommSetting.comm.DeleteMessage(index_del, PhoneStorageType.Sim); 
//MessageBox.Show("Message With Index " + index_del + " Deleted", "Message", 
MessageBoxButtons.OK, MessageBoxIcon.Information); 
 } 
//} 
 } 
catch (Exception ex) 
 { 
MessageBox.Show(ex.Message); 
 } 
 } 
privatevoid comm_PhoneConnected(object sender, EventArgs e) 
 { 
this.Invoke(newConnectedHandler(OnPhoneConnectionChange), newobject[] { true 
}); 
 } 
privatestring StatusToString(PhoneMessageStatus status) 
 { 
// Map a message status to a string 
string ret; 
switch (status) 
 { 
casePhoneMessageStatus.All: 
 ret = "All"; 
break; 
casePhoneMessageStatus.ReceivedRead: 
 ret = "Read"; 
break; 
casePhoneMessageStatus.ReceivedUnread: 
 ret = "Unread"; 
break; 
casePhoneMessageStatus.StoredSent: 
 ret = "Sent"; 
break; 
casePhoneMessageStatus.StoredUnsent: 
 ret = "Unsent"; 
break; 
default: 
 ret = "Unknown (" + status.ToString() + ")"; 
break; 
 } 
return ret; 
 } 
privatevoid Output(string text) 
 { 
if (this.txtOutput.InvokeRequired) 
 { 
SetTextCallback stc = newSetTextCallback(Output); 
this.Invoke(stc, newobject[] { text }); 
 } 
else 
 { 
 txtOutput.AppendText(text); 
 txtOutput.AppendText("\r\n"); 
 } 
 } 
 T r a n g | 136 
Đồ án tốt nghiệp 
privatevoid ShowMessage(SmsPdu pdu) 
 { 
if (pdu isSmsSubmitPdu) 
 { 
// Stored (sent/unsent) message 
SmsSubmitPdu data = (SmsSubmitPdu)pdu; 
 Output("SENT/UNSENT MESSAGE"); 
 Output("Recipient: " + data.DestinationAddress); 
 Output("Message text: " + data.UserDataText); 
 Output("-----------------------); 
return; 
 } 
if (pdu isSmsDeliverPdu) 
 { 
// Received message 
SmsDeliverPdu data = (SmsDeliverPdu)pdu; 
 Output("RECEIVED MESSAGE"); 
 Output("Sender: " + data.OriginatingAddress); 
 Output("Sent: " + data.SCTimestamp.ToString()); 
 Output("Message text: " + data.UserDataText); 
 xNumber = data.OriginatingAddress; 
 noidungTN = data.UserDataText; 
 Output("-----------------------------------------"); 
return; 
 } 
if (pdu isSmsStatusReportPdu) 
 { 
// Status report 
SmsStatusReportPdu data = (SmsStatusReportPdu)pdu; 
 Output("STATUS REPORT"); 
 Output("Recipient: " + data.RecipientAddress); 
 Output("Status: " + data.Status.ToString()); 
 Output("Timestamp: " + data.DischargeTime.ToString()); 
 Output("Message ref: " + data.MessageReference.ToString()); 
 Output("-----------------------------------------"); 
return; 
 } 
 Output("Unknown message type: " + pdu.GetType().ToString()); 
 } 
privatevoid mnu_send_click(object sender, System.EventArgs e) 
 { 
Send send_sms = newSend(); 
 send_sms.Show(); 
 } 
privatevoid mnu_read_click(object sender, System.EventArgs e) 
 { 
Receive receice_sms = newReceive(); 
 receice_sms.Show(); 
 } 
privatevoid Form1_Closing(object sender, 
System.ComponentModel.CancelEventArgs e) 
 { 
// Clean up comm object 
if (CommSetting.comm != null) 
 { 
// Unregister events 
CommSetting.comm.PhoneConnected -= newEventHandler(comm_PhoneConnected); 
CommSetting.comm.MessageReceived -= 
newMessageReceivedEventHandler(comm_MessageReceived); 
// Close connection to phone 
 T r a n g | 137 
Đồ án tốt nghiệp 
if (CommSetting.comm != null&&CommSetting.comm.IsOpen()) 
CommSetting.comm.Close(); 
CommSetting.comm = null; 
 } 
 } 
publicvoid ExitApplication() 
 { 
// Display a message box asking users if they 
// want to exit the application. 
if (MessageBox.Show("Do you want to exit?", "My Application", 
MessageBoxButtons.YesNo, MessageBoxIcon.Question) 
 == DialogResult.Yes) 
 { 
Application.Exit(); 
 } 
 } 
privatevoid aboutToolStripMenuItem1_Click(object sender, EventArgs e) 
 { 
MessageBox.Show("Trường Đại học Sư phạm Kỹ thuật TPHCM\nKhoa Điện - Điện 
tử\nĐồ án tốt nghiệp ngành Điện tử viễn thông\n'Tra cứu thông tin và Điều 
khiển thiết bị điện qua tin nhắn SMS'\nGiáo viên hướng dẫn: ThS. Đinh Quốc 
Hùng\nSinh viên thực hiện: Lưu Văn Đại, Trần Hoàng Lê Chuyên\nTháng 1 năm 
2011\nContact Us: 
[email protected]", "About", 
MessageBoxButtons.OK, MessageBoxIcon.Information); 
 } 
privatevoid sendToolStripMenuItem_Click(object sender, EventArgs e) 
 { 
Send send_sms = newSend(); 
 send_sms.Show(); 
 } 
privatevoid sendMultipleToolStripMenuItem_Click(object sender, EventArgs e) 
 { 
SendMulti sendMulti_sms = newSendMulti(); 
 sendMulti_sms.Show(); 
 } 
privatevoid readToolStripMenuItem_Click(object sender, EventArgs e) 
 { 
Receive receice_sms = newReceive(); 
 receice_sms.Show(); 
 } 
privatevoid deleteToolStripMenuItem_Click(object sender, EventArgs e) 
 { 
Delete delete = newDelete(); 
 delete.Show(); 
 } 
privatevoid aboutToolStripMenuItem_Click(object sender, EventArgs e) 
 { 
MessageBox.Show("Trường Đại học Sư phạm Kỹ thuật TPHCM\nKhoa Điện - Điện 
tử\nĐồ án tốt nghiệp ngành Điện tử viễn thông\n'Tra cứu thông tin và Điều 
khiển thiết bị điện qua tin nhắn SMS'\nGiáo viên hướng dẫn: ThS. Đinh Quốc 
Hùng\nSinh viên thực hiện: Lưu Văn Đại, Trần Hoàng Lê Chuyên\nTháng 1 năm 
2011\nContact Us: 
[email protected]", "About", 
MessageBoxButtons.OK, MessageBoxIcon.Information); 
 } 
 } 
} 
3. Send Multiple SMS 
 T r a n g | 138 
Đồ án tốt nghiệp 
using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Data.OleDb; 
using System.Drawing; 
using System.Text; 
using System.Windows.Forms; 
using System.Collections; 
using GsmComm.PduConverter; 
using GsmComm.GsmCommunication; 
namespace SMS 
{ 
publicpartialclassSendMulti : Form 
 { 
privatedelegatevoidSetTextCallback(string text); 
string timlop, xNumber, xlop, ten, lop; 
int numberOfRowsFeched; 
DataTable dt; 
public SendMulti() 
 { 
 InitializeComponent(); 
 cmbk12.Items.Add("12A1"); 
 cmbk12.Items.Add("12A2"); 
 cmbk12.Items.Add("12A3"); 
 cmbk12.Items.Add("Ca khoi 12"); 
 cmbk11.Items.Add("11A1"); 
 cmbk11.Items.Add("11A2"); 
 cmbk11.Items.Add("11A3"); 
 cmbk11.Items.Add("Ca khoi 11"); 
 cmbk10.Items.Add("10A1"); 
 cmbk10.Items.Add("10A2"); 
 cmbk10.Items.Add("10A3"); 
 cmbk10.Items.Add("Ca khoi 10"); 
 cmbgv.Items.Add("GVT"); 
 cmbgv.Items.Add("GVL"); 
 cmbgv.Items.Add("GVH"); 
 cmbgv.Items.Add("All GV"); 
 } 
privatevoid SendMulti_Load(object sender, System.EventArgs e) 
 { 
 T r a n g | 139 
Đồ án tốt nghiệp 
 chkMultipleTimes.Checked = true; 
 } 
privatevoid cmbk12_SelectedIndexChanged(object sender, EventArgs e) 
 { 
 timlop = cmbk12.SelectedItem.ToString(); 
 kiemtraHS(); 
 textBox1.Text = "Chọn gửi tới: " + cmbk12.SelectedItem + 
"\r\nTổng số: " + numberOfRowsFeched.ToString(); 
 } 
privatevoid cmbk11_SelectedIndexChanged(object sender, EventArgs e) 
 { 
 timlop = cmbk11.SelectedItem.ToString(); 
 kiemtraHS(); 
 textBox1.Text = "Chọn gửi tới: " + cmbk11.SelectedItem + 
"\r\nTổng số: " + numberOfRowsFeched.ToString(); 
 } 
privatevoid cmbk10_SelectedIndexChanged(object sender, EventArgs e) 
 { 
 timlop = cmbk10.SelectedItem.ToString(); 
 kiemtraHS(); 
 textBox1.Text = "Chọn gửi tới: " + cmbk10.SelectedItem + 
"\r\nTổng số: " + numberOfRowsFeched.ToString(); 
 } 
privatevoid cmbgv_SelectedIndexChanged(object sender, EventArgs e) 
 { 
 timlop = cmbgv.SelectedItem.ToString(); 
 kiemtraGV(); 
 textBox1.Text = "Chọn gửi tới: " + cmbgv.SelectedItem + 
"\r\nTổng số: " + numberOfRowsFeched.ToString(); 
 } 
privatevoid btnbochon_Click(object sender, EventArgs e) 
 { 
 textBox1.Text = ""; 
 timlop = ""; 
 } 
privatevoid BtnClear_Click(object sender, System.EventArgs e) 
 { 
 txt_message.Text = ""; 
 txt_message.Focus(); 
 } 
privatevoid textBox1_TextChanged(object sender, System.EventArgs e) 
 { 
int remaining = int.Parse(txt_text_remaining.Text.Trim()); 
 remaining -= 1; 
 txt_text_remaining.Text = remaining.ToString(); 
 } 
privatevoid kiemtraHS() 
 { 
Cursor.Current = Cursors.WaitCursor; 
string conString = @"Provider=Microsoft.JET.OLEDB.4.0;" + @"data 
source=D:\DATA.mdb"; 
OleDbConnection conn = newOleDbConnection(conString); 
try 
 { 
// create an open the connection 
 conn.Open(); 
// create the adapter and fill the DataSet 
if (timlop == "Ca khoi 12") 
 { 
 timlop = "12A"; 
 xlop = "HS"; 
OleDbDataAdapter adapter1 = newOleDbDataAdapter("SELECT Mobile, Name, Class 
FROM Pupils WHERE LEFT(Class ,3) = \'" + timlop + "\'", conn); 
 dataSet1.Clear(); 
 numberOfRowsFeched = adapter1.Fill(dataSet1, "Pupils"); 
 T r a n g | 140 
Đồ án tốt nghiệp 
 dt = dataSet1.Tables["Pupils"]; 
 } 
elseif (timlop == "Ca khoi 11") 
 { 
 timlop = "11A"; 
 xlop = "HS"; 
OleDbDataAdapter adapter1 = newOleDbDataAdapter("SELECT Mobile, Name, Class 
FROM Pupils WHERE LEFT(Class ,3) = \'" + timlop + "\'", conn); 
 dataSet1.Clear(); 
 numberOfRowsFeched = adapter1.Fill(dataSet1, "Pupils"); 
 dt = dataSet1.Tables["Pupils"]; 
 } 
elseif (timlop == "Ca khoi 10") 
 { 
 timlop = "10A"; 
 xlop = "HS"; 
OleDbDataAdapter adapter1 = newOleDbDataAdapter("SELECT Mobile, Name, Class 
FROM Pupils WHERE LEFT(Class ,3) = \'" + timlop + "\'", conn); 
 dataSet1.Clear(); 
 numberOfRowsFeched = adapter1.Fill(dataSet1, "Pupils"); 
 dt = dataSet1.Tables["Pupils"]; 
 } 
else 
 { 
 xlop = "HS"; 
OleDbDataAdapter adapter1 = newOleDbDataAdapter("SELECT Mobile, Name, Class 
FROM Pupils WHERE Class = \'" + timlop + "\'", conn); 
 dataSet1.Clear(); 
 numberOfRowsFeched = adapter1.Fill(dataSet1, "Pupils"); 
 dt = dataSet1.Tables["Pupils"]; 
 } 
 } 
catch (Exception E) 
 { 
MessageBox.Show("Error occured: " + E.Message); 
 } 
finally 
 { 
 conn.Close(); 
 } 
 } 
privatevoid kiemtraGV() 
 { 
Cursor.Current = Cursors.WaitCursor; 
string conString = @"Provider=Microsoft.JET.OLEDB.4.0;" + @"data 
source=D:\DATA.mdb"; 
OleDbConnection conn = newOleDbConnection(conString); 
try 
 { 
// create an open the connection 
 conn.Open(); 
// create the adapter and fill the DataSet 
if (timlop == "All GV") 
 { 
 timlop = "GV"; 
 xlop = "GV"; 
OleDbDataAdapter adapter1 = newOleDbDataAdapter("SELECT Mobile, Name FROM 
Teachers WHERE Left(MSGV ,2)= \'" + timlop + "\'", conn); 
 dataSet1.Clear(); 
 numberOfRowsFeched = adapter1.Fill(dataSet1, 
"Teachers"); 
 dt = dataSet1.Tables["Teachers"]; 
 } 
else 
 T r a n g | 141 
Đồ án tốt nghiệp 
 { 
 xlop = "GV"; 
OleDbDataAdapter adapter1 = newOleDbDataAdapter("SELECT Mobile, Name, 
ChuyenMon FROM Teachers WHERE Left(MSGV ,3)= \'" + timlop + "\'", conn); 
 dataSet1.Clear(); 
 numberOfRowsFeched = adapter1.Fill(dataSet1, 
"Teachers"); 
 dt = dataSet1.Tables["Teachers"]; 
 } 
 } 
catch (Exception E) 
 { 
MessageBox.Show("Error occured: " + E.Message); 
 } 
finally 
 { 
 conn.Close(); 
 } 
 } 
privatevoid btnSendMessage_Click(object sender, System.EventArgs e) 
 { 
Cursor.Current = Cursors.WaitCursor; 
for (int i = 0; i < numberOfRowsFeched; i++) 
 { 
 xNumber = dt.Rows[i][0].ToString(); 
 ten = dt.Rows[i][1].ToString(); 
//Output(xNumber); 
 GuiTinNhan(); 
if (xlop == "HS") 
 { 
 lop = dt.Rows[i][2].ToString(); 
 ten = dt.Rows[i][1].ToString(); 
 Output("Đã gửi thông báo đến Phụ huynh em: " + ten + ", 
Lớp" + lop); 
 Output(""); 
 } 
else 
 { 
 lop = dt.Rows[i][2].ToString(); 
 Output("Đã gửi thông báo đến giáo viên : " + ten + ", 
Chuyên môn: "+ dt.Rows[i][2].ToString()); 
 Output(""); 
 } 
 } 
Cursor.Current = Cursors.Default; 
 } 
privatevoid GuiTinNhan() 
 { 
// Send an SMS message 
SmsSubmitPdu pdu; 
bool alert = chkAlert.Checked; 
bool unicode = chkUnicode.Checked; 
string smsc = "+84900000022";//smscMobifone 
if (!alert && !unicode) 
 { 
// The straightforward version 
 pdu = newSmsSubmitPdu(txt_message.Text, xNumber, smsc); // 
"" indicate SMSC No 
 } 
else 
 { 
// The extended version with dcs 
byte dcs; 
 T r a n g | 142 
Đồ án tốt nghiệp 
if (!alert && unicode) 
 dcs = DataCodingScheme.NoClass_16Bit; 
elseif (alert && !unicode) 
 dcs = DataCodingScheme.Class0_7Bit; 
elseif (alert && unicode) 
 dcs = DataCodingScheme.Class0_16Bit; 
else 
 dcs = DataCodingScheme.NoClass_7Bit; // should never 
occur here 
 pdu = newSmsSubmitPdu(txt_message.Text, xNumber, smsc, dcs); 
 } 
// Send the same message multiple times if this is set 
int times = chkMultipleTimes.Checked ? int.Parse(txtSendTimes.Text) : 1; 
// Send the message the specified number of times 
for (int i = 0; i < times; i++) 
 { 
CommSetting.comm.SendMessage(pdu); 
 } 
 } 
privatevoid Output(string text) 
 { 
if (this.txtOutput.InvokeRequired) 
 { 
SetTextCallback stc = newSetTextCallback(Output); 
this.Invoke(stc, newobject[] { text }); 
 } 
else 
 { 
 txtOutput.AppendText(text); 
 txtOutput.AppendText("\r\n"); 
 } 
 } 
 } 
} 
4. Send 
using System; 
using System.Drawing; 
using System.Collections; 
using System.ComponentModel; 
 T r a n g | 143 
Đồ án tốt nghiệp 
using System.Windows.Forms; 
using GsmComm.PduConverter; 
using GsmComm.GsmCommunication; 
namespace SMS 
{ 
 /// 
 /// Summary description for Send. 
 /// 
 publicclassSend : System.Windows.Forms.Form 
 { 
 private System.Windows.Forms.PictureBox pictureBox1; 
 private System.Windows.Forms.Label label1; 
 private System.Windows.Forms.TextBox txt_destination_numbers; 
 private System.Windows.Forms.Label label2; 
 private System.Windows.Forms.TextBox txt_text_remaining; 
 private System.Windows.Forms.Button btnSendMessage; 
 private System.Windows.Forms.Button BtnClear; 
 private System.Windows.Forms.TextBox txt_message; 
 private System.Windows.Forms.TextBox txtOutput; 
 private System.Windows.Forms.CheckBox chkUnicode; 
 private System.Windows.Forms.CheckBox chkAlert; 
 private System.Windows.Forms.GroupBox groupBox1; 
 private System.Windows.Forms.Label label19; 
 private System.Windows.Forms.TextBox txtSendTimes; 
 private System.Windows.Forms.CheckBox chkMultipleTimes; 
 /// 
 /// Required designer variable. 
 /// 
 private System.ComponentModel.Container components = null; 
 privatedelegatevoidSetTextCallback(string text); 
 public Send() 
 { 
 // 
 // Required for Windows Form Designer support 
 // 
 InitializeComponent(); 
 // 
 // TODO: Add any constructor code after 
InitializeComponent call 
 // 
 } 
 /// 
 /// Clean up any resources being used. 
 /// 
 protectedoverridevoid Dispose( bool disposing ) 
 { 
 if( disposing ) 
 { 
 if(components != null) 
 { 
 components.Dispose(); 
 } 
 } 
 base.Dispose( disposing ); 
 } 
 #region Windows Form Designer generated code 
 /// 
 /// Required method for Designer support - do not modify 
 T r a n g | 144 
Đồ án tốt nghiệp 
 /// the contents of this method with the code editor. 
 /// 
 privatevoid InitializeComponent() 
 { 
 System.ComponentModel.ComponentResourceManager resources = new 
System.ComponentModel.ComponentResourceManager(typeof(Send)); 
this.pictureBox1 = new System.Windows.Forms.PictureBox(); 
this.label1 = new System.Windows.Forms.Label(); 
this.txt_destination_numbers = new System.Windows.Forms.TextBox(); 
this.label2 = new System.Windows.Forms.Label(); 
this.txt_message = new System.Windows.Forms.TextBox(); 
this.txt_text_remaining = new System.Windows.Forms.TextBox(); 
this.btnSendMessage = new System.Windows.Forms.Button(); 
this.BtnClear = new System.Windows.Forms.Button(); 
this.txtOutput = new System.Windows.Forms.TextBox(); 
this.chkUnicode = new System.Windows.Forms.CheckBox(); 
this.chkAlert = new System.Windows.Forms.CheckBox(); 
this.groupBox1 = new System.Windows.Forms.GroupBox(); 
this.txtSendTimes = new System.Windows.Forms.TextBox(); 
this.chkMultipleTimes = new System.Windows.Forms.CheckBox(); 
this.label19 = new System.Windows.Forms.Label(); 
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); 
this.groupBox1.SuspendLayout(); 
this.SuspendLayout(); 
// 
// pictureBox1 
// 
this.pictureBox1.BackgroundImage = 
((System.Drawing.Image)(resources.GetObject("pictureBox1.BackgroundImage")))
; 
this.pictureBox1.Location = new System.Drawing.Point(0, 2); 
this.pictureBox1.Name = "pictureBox1"; 
this.pictureBox1.Size = new System.Drawing.Size(371, 104); 
this.pictureBox1.TabIndex = 0; 
this.pictureBox1.TabStop = false; 
// 
// label1 
// 
this.label1.Font = new System.Drawing.Font("Microsoft Sans Serif", 10F, 
System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 
((byte)(0))); 
this.label1.Location = new System.Drawing.Point(0, 112); 
this.label1.Name = "label1"; 
this.label1.Size = new System.Drawing.Size(144, 24); 
this.label1.TabIndex = 1; 
this.label1.Text = "Destination Number :"; 
// 
// txt_destination_numbers 
// 
this.txt_destination_numbers.Location = new System.Drawing.Point(0, 136); 
this.txt_destination_numbers.Name = "txt_destination_numbers"; 
this.txt_destination_numbers.Size = new System.Drawing.Size(224, 20); 
this.txt_destination_numbers.TabIndex = 2; 
this.txt_destination_numbers.Text = "+84"; 
// 
// label2 
// 
this.label2.Font = new System.Drawing.Font("Microsoft Sans Serif", 10F, 
System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 
((byte)(0))); 
this.label2.Location = new System.Drawing.Point(0, 168); 
this.label2.Name = "label2"; 
this.label2.Size = new System.Drawing.Size(72, 16); 
this.label2.TabIndex = 3; 
this.label2.Text = "Message:"; 
 T r a n g | 145 
Đồ án tốt nghiệp 
// 
// txt_message 
// 
this.txt_message.Location = new System.Drawing.Point(0, 192); 
this.txt_message.Multiline = true; 
this.txt_message.Name = "txt_message"; 
this.txt_message.ScrollBars = System.Windows.Forms.ScrollBars.Both; 
this.txt_message.Size = new System.Drawing.Size(224, 112); 
this.txt_message.TabIndex = 4; 
this.txt_message.TextChanged += new 
System.EventHandler(this.textBox1_TextChanged); 
// 
// txt_text_remaining 
// 
this.txt_text_remaining.BackColor = System.Drawing.SystemColors.Control; 
this.txt_text_remaining.Enabled = false; 
this.txt_text_remaining.Location = new System.Drawing.Point(224, 288); 
this.txt_text_remaining.Name = "txt_text_remaining"; 
this.txt_text_remaining.Size = new System.Drawing.Size(40, 20); 
this.txt_text_remaining.TabIndex = 5; 
this.txt_text_remaining.Text = "160"; 
// 
// btnSendMessage 
// 
this.btnSendMessage.FlatStyle = System.Windows.Forms.FlatStyle.System; 
this.btnSendMessage.Location = new System.Drawing.Point(144, 320); 
this.btnSendMessage.Name = "btnSendMessage"; 
this.btnSendMessage.Size = new System.Drawing.Size(80, 24); 
this.btnSendMessage.TabIndex = 16; 
this.btnSendMessage.Text = "Send"; 
this.btnSendMessage.Click += new 
System.EventHandler(this.btnSendMessage_Click); 
// 
// BtnClear 
// 
this.BtnClear.FlatStyle = System.Windows.Forms.FlatStyle.System; 
this.BtnClear.Location = new System.Drawing.Point(56, 320); 
this.BtnClear.Name = "BtnClear"; 
this.BtnClear.Size = new System.Drawing.Size(80, 24); 
this.BtnClear.TabIndex = 17; 
this.BtnClear.Text = "Clear"; 
this.BtnClear.Click += new System.EventHandler(this.BtnClear_Click); 
// 
// txtOutput 
// 
this.txtOutput.Location = new System.Drawing.Point(0, 352); 
this.txtOutput.Multiline = true; 
this.txtOutput.Name = "txtOutput"; 
this.txtOutput.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; 
this.txtOutput.Size = new System.Drawing.Size(504, 120); 
this.txtOutput.TabIndex = 56; 
// 
// chkUnicode 
// 
this.chkUnicode.FlatStyle = System.Windows.Forms.FlatStyle.System; 
this.chkUnicode.Location = new System.Drawing.Point(16, 56); 
this.chkUnicode.Name = "chkUnicode"; 
this.chkUnicode.Size = new System.Drawing.Size(208, 24); 
this.chkUnicode.TabIndex = 58; 
this.chkUnicode.Text = "Send as Unicode (UCS2)"; 
// 
// chkAlert 
// 
this.chkAlert.FlatStyle = System.Windows.Forms.FlatStyle.System; 
this.chkAlert.Location = new System.Drawing.Point(16, 24); 
this.chkAlert.Name = "chkAlert"; 
 T r a n g | 146 
Đồ án tốt nghiệp 
this.chkAlert.Size = new System.Drawing.Size(176, 24); 
this.chkAlert.TabIndex = 57; 
this.chkAlert.Text = "Request immediate display (alert)"; 
// 
// groupBox1 
// 
this.groupBox1.Controls.Add(this.chkUnicode); 
this.groupBox1.Controls.Add(this.chkAlert); 
this.groupBox1.Controls.Add(this.txtSendTimes); 
this.groupBox1.Controls.Add(this.chkMultipleTimes); 
this.groupBox1.Controls.Add(this.label19); 
this.groupBox1.Location = new System.Drawing.Point(240, 112); 
this.groupBox1.Name = "groupBox1"; 
this.groupBox1.Size = new System.Drawing.Size(264, 128); 
this.groupBox1.TabIndex = 59; 
this.groupBox1.TabStop = false; 
this.groupBox1.Text = "Option"; 
// 
// txtSendTimes 
// 
this.txtSendTimes.Location = new System.Drawing.Point(120, 88); 
this.txtSendTimes.Name = "txtSendTimes"; 
this.txtSendTimes.Size = new System.Drawing.Size(48, 20); 
this.txtSendTimes.TabIndex = 61; 
this.txtSendTimes.Text = "1"; 
// 
// chkMultipleTimes 
// 
this.chkMultipleTimes.FlatStyle = System.Windows.Forms.FlatStyle.System; 
this.chkMultipleTimes.Location = new System.Drawing.Point(16, 88); 
this.chkMultipleTimes.Name = "chkMultipleTimes"; 
this.chkMultipleTimes.Size = new System.Drawing.Size(104, 24); 
this.chkMultipleTimes.TabIndex = 60; 
this.chkMultipleTimes.Text = "Send message"; 
// 
// label19 
// 
this.label19.FlatStyle = System.Windows.Forms.FlatStyle.System; 
this.label19.Location = new System.Drawing.Point(176, 88); 
this.label19.Name = "label19"; 
this.label19.Size = new System.Drawing.Size(72, 23); 
this.label19.TabIndex = 62; 
this.label19.Text = "times"; 
this.label19.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; 
// 
// Send 
// 
this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); 
this.ClientSize = new System.Drawing.Size(504, 478); 
this.Controls.Add(this.groupBox1); 
this.Controls.Add(this.txtOutput); 
this.Controls.Add(this.BtnClear); 
this.Controls.Add(this.btnSendMessage); 
this.Controls.Add(this.txt_text_remaining); 
this.Controls.Add(this.txt_message); 
this.Controls.Add(this.label2); 
this.Controls.Add(this.txt_destination_numbers); 
this.Controls.Add(this.label1); 
this.Controls.Add(this.pictureBox1); 
this.Name = "Send"; 
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; 
this.Text = "Send SMS"; 
this.Load += new System.EventHandler(this.Send_Load); 
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); 
this.groupBox1.ResumeLayout(false); 
 T r a n g | 147 
Đồ án tốt nghiệp 
this.groupBox1.PerformLayout(); 
this.ResumeLayout(false); 
this.PerformLayout(); 
 } 
 #endregion 
 privatevoid textBox1_TextChanged(object sender, System.EventArgs 
e) 
 { 
 int remaining=int.Parse(txt_text_remaining.Text.Trim()); 
 remaining-=1; 
 txt_text_remaining.Text=remaining.ToString(); 
 } 
 privatevoid BtnClear_Click(object sender, System.EventArgs e) 
 { 
 txt_message.Text=""; 
 txt_message.Focus(); 
 } 
 privatevoid btnSendMessage_Click(object sender, System.EventArgs 
e) 
 { 
 Cursor.Current = Cursors.WaitCursor; 
 try 
 { 
 // Send an SMS message 
 SmsSubmitPdu pdu; 
 bool alert = chkAlert.Checked; 
 bool unicode = chkUnicode.Checked; 
string smsc = "+84900000022"; 
 if (!alert && !unicode) 
 { 
 // The straightforward version 
 pdu = newSmsSubmitPdu(txt_message.Text, 
txt_destination_numbers.Text,smsc); // "" indicate SMSC No 
 } 
 else 
 { 
 // The extended version with dcs 
 byte dcs; 
 if (!alert && unicode) 
 dcs = DataCodingScheme.NoClass_16Bit; 
 elseif (alert && !unicode) 
 dcs = DataCodingScheme.Class0_7Bit; 
 elseif (alert && unicode) 
 dcs = DataCodingScheme.Class0_16Bit; 
 else 
 dcs = DataCodingScheme.NoClass_7Bit; // 
should never occur here 
 pdu = newSmsSubmitPdu(txt_message.Text, 
txt_destination_numbers.Text, smsc, dcs); 
 } 
 // Send the same message multiple times if this is 
set 
 int times = chkMultipleTimes.Checked ? 
int.Parse(txtSendTimes.Text) : 1; 
 // Send the message the specified number of times 
 for (int i=0;i<times;i++) 
 { 
 CommSetting.comm.SendMessage(pdu); 
 T r a n g | 148 
Đồ án tốt nghiệp 
 Output("Message {0} of {1} sent.", i+1, 
times); 
 Output(""); 
 } 
 } 
 catch(Exception ex) 
 { 
 MessageBox.Show(ex.Message); 
 } 
 Cursor.Current = Cursors.Default; 
 } 
 privatevoid Output(string text) 
 { 
 if (this.txtOutput.InvokeRequired) 
 { 
 SetTextCallback stc = newSetTextCallback(Output); 
 this.Invoke(stc, newobject[] { text }); 
 } 
 else 
 { 
 txtOutput.AppendText(text); 
 txtOutput.AppendText("\r\n"); 
 } 
 } 
 privatevoid Send_Load(object sender, System.EventArgs e) 
 { 
 chkMultipleTimes.Checked=true; 
 } 
 privatevoid Output(string text, paramsobject[] args) 
 { 
 string msg = string.Format(text, args); 
 Output(msg); 
 } 
 } 
} 
5. Receive 
 T r a n g | 149 
Đồ án tốt nghiệp 
using System; 
using System.Drawing; 
using System.Collections; 
using System.ComponentModel; 
using System.Windows.Forms; 
using System.Data; 
using System.Data.OleDb; 
using GsmComm.PduConverter; 
using GsmComm.GsmCommunication; 
namespace SMS 
{ 
 /// 
 /// Summary description for Receive. 
 /// 
 publicclassReceive : System.Windows.Forms.Form 
 { 
 private System.Windows.Forms.Button btnReadMessage; 
 private System.Windows.Forms.RadioButton rbMessagePhone; 
 private System.Windows.Forms.RadioButton rbMessageSIM; 
 private System.Windows.Forms.TextBox txtOutput; 
 private System.Windows.Forms.GroupBox groupBox1; 
 private System.Windows.Forms.DataGrid dataGrid1; 
 /// 
 /// Required designer variable. 
 /// 
 private System.ComponentModel.Container components = null; 
 privateDataTable dt=newDataTable(); 
 privatedelegatevoidSetTextCallback(string text); 
 public Receive() 
 { 
 // 
 T r a n g | 150 
Đồ án tốt nghiệp 
 // Required for Windows Form Designer support 
 // 
 InitializeComponent(); 
 // 
 // TODO: Add any constructor code after 
InitializeComponent call 
 // 
 } 
 /// 
 /// Clean up any resources being used. 
 /// 
 protectedoverridevoid Dispose( bool disposing ) 
 { 
 if( disposing ) 
 { 
 if(components != null) 
 { 
 components.Dispose(); 
 } 
 } 
 base.Dispose( disposing ); 
 } 
 #region Windows Form Designer generated code 
 /// 
 /// Required method for Designer support - do not modify 
 /// the contents of this method with the code editor. 
 /// 
 privatevoid InitializeComponent() 
 { 
this.btnReadMessage = new System.Windows.Forms.Button(); 
this.rbMessagePhone = new System.Windows.Forms.RadioButton(); 
this.rbMessageSIM = new System.Windows.Forms.RadioButton(); 
this.txtOutput = new System.Windows.Forms.TextBox(); 
this.groupBox1 = new System.Windows.Forms.GroupBox(); 
this.dataGrid1 = new System.Windows.Forms.DataGrid(); 
this.groupBox1.SuspendLayout(); 
((System.ComponentModel.ISupportInitialize)(this.dataGrid1)).BeginInit(); 
this.SuspendLayout(); 
// 
// btnReadMessage 
// 
this.btnReadMessage.FlatStyle = System.Windows.Forms.FlatStyle.System; 
this.btnReadMessage.Location = new System.Drawing.Point(192, 80); 
this.btnReadMessage.Name = "btnReadMessage"; 
this.btnReadMessage.Size = new System.Drawing.Size(112, 24); 
this.btnReadMessage.TabIndex = 17; 
this.btnReadMessage.Text = "Read All Messages"; 
this.btnReadMessage.Click += new 
System.EventHandler(this.btnReadMessage_Click); 
// 
// rbMessagePhone 
// 
this.rbMessagePhone.FlatStyle = System.Windows.Forms.FlatStyle.System; 
this.rbMessagePhone.Location = new System.Drawing.Point(16, 56); 
this.rbMessagePhone.Name = "rbMessagePhone"; 
this.rbMessagePhone.Size = new System.Drawing.Size(64, 24); 
this.rbMessagePhone.TabIndex = 25; 
this.rbMessagePhone.TabStop = true; 
this.rbMessagePhone.Text = "Phone"; 
// 
// rbMessageSIM 
// 
 T r a n g | 151 
Đồ án tốt nghiệp 
this.rbMessageSIM.Checked = true; 
this.rbMessageSIM.FlatStyle = System.Windows.Forms.FlatStyle.System; 
this.rbMessageSIM.Location = new System.Drawing.Point(16, 24); 
this.rbMessageSIM.Name = "rbMessageSIM"; 
this.rbMessageSIM.Size = new System.Drawing.Size(64, 24); 
this.rbMessageSIM.TabIndex = 24; 
this.rbMessageSIM.TabStop = true; 
this.rbMessageSIM.Text = "SIM"; 
// 
// txtOutput 
// 
this.txtOutput.Location = new System.Drawing.Point(6, 304); 
this.txtOutput.Multiline = true; 
this.txtOutput.Name = "txtOutput"; 
this.txtOutput.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; 
this.txtOutput.Size = new System.Drawing.Size(492, 144); 
this.txtOutput.TabIndex = 57; 
// 
// groupBox1 
// 
this.groupBox1.Controls.Add(this.rbMessageSIM); 
this.groupBox1.Controls.Add(this.rbMessagePhone); 
this.groupBox1.Location = new System.Drawing.Point(8, 8); 
this.groupBox1.Name = "groupBox1"; 
this.groupBox1.Size = new System.Drawing.Size(176, 96); 
this.groupBox1.TabIndex = 58; 
this.groupBox1.TabStop = false; 
this.groupBox1.Text = "Message Storage"; 
// 
// dataGrid1 
// 
this.dataGrid1.DataMember = ""; 
this.dataGrid1.HeaderForeColor = System.Drawing.SystemColors.ControlText; 
this.dataGrid1.Location = new System.Drawing.Point(7, 120); 
this.dataGrid1.Name = "dataGrid1"; 
this.dataGrid1.RowHeadersVisible = false; 
this.dataGrid1.SelectionBackColor = System.Drawing.Color.CornflowerBlue; 
this.dataGrid1.Size = new System.Drawing.Size(492, 176); 
this.dataGrid1.TabIndex = 59; 
// 
// Receive 
// 
this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); 
this.ClientSize = new System.Drawing.Size(504, 478); 
this.Controls.Add(this.dataGrid1); 
this.Controls.Add(this.groupBox1); 
this.Controls.Add(this.txtOutput); 
this.Controls.Add(this.btnReadMessage); 
this.Name = "Receive"; 
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; 
this.Text = "Read Messages"; 
this.Load += new System.EventHandler(this.Receive_Load); 
this.groupBox1.ResumeLayout(false); 
((System.ComponentModel.ISupportInitialize)(this.dataGrid1)).EndInit(); 
this.ResumeLayout(false); 
this.PerformLayout(); 
 } 
 #endregion 
privatevoid btnReadMessage_Click(object sender, System.EventArgs e) 
 { 
Cursor.Current = Cursors.WaitCursor; 
string storage = GetMessageStorage(); 
 T r a n g | 152 
Đồ án tốt nghiệp 
try 
 { 
// Read all SMS messages from the storage 
DecodedShortMessage[] messages = 
CommSetting.comm.ReadMessages(PhoneMessageStatus.All, storage); 
foreach (DecodedShortMessage message in messages) 
 { 
 Output(string.Format("Message status = {0}, Location = 
{1}/{2}", 
 StatusToString(message.Status), message.Storage, 
message.Index)); 
 ShowMessage(message.Data); 
 Output(""); 
 } 
 Output(string.Format("{0,9} messages read.", 
messages.Length.ToString())); 
 Output(""); 
 } 
catch (Exception ex) 
 { 
MessageBox.Show(ex.Message); 
 } 
 } 
privatevoid BindGrid(SmsPdu pdu) 
 { 
DataRow dr = dt.NewRow(); 
SmsDeliverPdu data = (SmsDeliverPdu)pdu; 
 dr[0] = data.OriginatingAddress.ToString(); 
 dr[1] = data.SCTimestamp.ToString(); 
 dr[2] = data.UserDataText; 
 dt.Rows.Add(dr); 
 dataGrid1.DataSource = dt; 
 } 
 privatevoid ShowMessage(SmsPdu pdu) 
 { 
 if (pdu isSmsSubmitPdu) 
 { 
 // Stored (sent/unsent) message 
 SmsSubmitPdu data = (SmsSubmitPdu)pdu; 
 Output("SENT/UNSENT MESSAGE"); 
 Output("Recipient: " + data.DestinationAddress); 
 Output("Message text: " + data.UserDataText); 
 Output("------------------------------"); 
 return; 
 } 
 if (pdu isSmsDeliverPdu) 
 { 
 // Received message 
 SmsDeliverPdu data = (SmsDeliverPdu)pdu; 
 Output("RECEIVED MESSAGE"); 
 Output("Sender: " + data.OriginatingAddress); 
 Output("Sent: " + data.SCTimestamp.ToString()); 
 Output("Message text: " + data.UserDataText); 
 Output("---------------------------------"); 
 BindGrid(pdu); 
 return; 
 } 
 T r a n g | 153 
Đồ án tốt nghiệp 
 if (pdu isSmsStatusReportPdu) 
 { 
 // Status report 
 SmsStatusReportPdu data = (SmsStatusReportPdu)pdu; 
 Output("STATUS REPORT"); 
 Output("Recipient: " + data.RecipientAddress); 
 Output("Status: " + data.Status.ToString()); 
 Output("Timestamp: " + 
data.DischargeTime.ToString()); 
 Output("Message ref: " + 
data.MessageReference.ToString()); 
 Output("-----------------------------------"); 
 return; 
 } 
 Output("Unknown message type: " + 
pdu.GetType().ToString()); 
 } 
 privatestring StatusToString(PhoneMessageStatus status) 
 { 
 // Map a message status to a string 
 string ret; 
 switch(status) 
 { 
 casePhoneMessageStatus.All: 
 ret = "All"; 
 break; 
 casePhoneMessageStatus.ReceivedRead: 
 ret = "Read"; 
 break; 
 casePhoneMessageStatus.ReceivedUnread: 
 ret = "Unread"; 
 break; 
 casePhoneMessageStatus.StoredSent: 
 ret = "Sent"; 
 break; 
 casePhoneMessageStatus.StoredUnsent: 
 ret = "Unsent"; 
 break; 
 default: 
 ret = "Unknown (" + status.ToString() + ")"; 
 break; 
 } 
 return ret; 
 } 
 privatestring GetMessageStorage() 
 { 
 string storage = string.Empty; 
 if (rbMessageSIM.Checked) 
 storage = PhoneStorageType.Sim; 
 if (rbMessagePhone.Checked) 
 storage = PhoneStorageType.Phone; 
 if (storage.Length == 0) 
 thrownewApplicationException("Unknown message 
storage."); 
 else 
 return storage; 
 } 
 privatevoid Output(string text) 
 { 
 if (this.txtOutput.InvokeRequired) 
 T r a n g | 154 
Đồ án tốt nghiệp 
 { 
 SetTextCallback stc = newSetTextCallback(Output); 
 this.Invoke(stc, newobject[] { text }); 
 } 
 else 
 { 
 txtOutput.AppendText(text); 
 txtOutput.AppendText("\r\n"); 
 } 
 } 
 privatevoid Receive_Load(object sender, System.EventArgs e) 
 { 
 dt.Columns.Add("Sender",typeof(string)); 
 dt.Columns.Add("Time",typeof(string)); 
 dt.Columns.Add("Message",typeof(string)); 
 } 
 privatevoid Output(string text, paramsobject[] args) 
 { 
 string msg = string.Format(text, args); 
 Output(msg); 
 } 
 } 
} 
6. Delete 
using System; 
using System.Drawing; 
using System.Collections; 
using System.ComponentModel; 
using System.Windows.Forms; 
using System.Data; 
 T r a n g | 155 
Đồ án tốt nghiệp 
using GsmComm.PduConverter; 
using GsmComm.GsmCommunication; 
namespace SMS 
{ 
 /// 
 /// Summary description for Delete. 
 /// 
 publicclassDelete : System.Windows.Forms.Form 
 { 
 private System.Windows.Forms.DataGrid dataGrid1; 
 /// 
 /// Required designer variable. 
 /// 
 private System.ComponentModel.Container components = null; 
 private System.Windows.Forms.Button btn_delete; 
 private System.Windows.Forms.Button btn_delete_all; 
 private System.Windows.Forms.TextBox txt_message_index; 
 privateDataTable dt=newDataTable(); 
 privatedelegatevoidSetTextCallback(string text); 
 public Delete() 
 { 
 // 
 // Required for Windows Form Designer support 
 // 
 InitializeComponent(); 
 // 
 // TODO: Add any constructor code after 
InitializeComponent call 
 // 
 } 
 /// 
 /// Clean up any resources being used. 
 /// 
 protectedoverridevoid Dispose( bool disposing ) 
 { 
 if( disposing ) 
 { 
 if(components != null) 
 { 
 components.Dispose(); 
 } 
 } 
 base.Dispose( disposing ); 
 } 
 #region Windows Form Designer generated code 
 /// 
 /// Required method for Designer support - do not modify 
 /// the contents of this method with the code editor. 
 /// 
 privatevoid InitializeComponent() 
 { 
this.dataGrid1 = new System.Windows.Forms.DataGrid(); 
this.btn_delete = new System.Windows.Forms.Button(); 
this.btn_delete_all = new System.Windows.Forms.Button(); 
this.txt_message_index = new System.Windows.Forms.TextBox(); 
((System.ComponentModel.ISupportInitialize)(this.dataGrid1)).BeginInit(); 
this.SuspendLayout(); 
// 
// dataGrid1 
// 
 T r a n g | 156 
Đồ án tốt nghiệp 
this.dataGrid1.DataMember = ""; 
this.dataGrid1.HeaderForeColor = System.Drawing.SystemColors.ControlText; 
this.dataGrid1.Location = new System.Drawing.Point(8, 40); 
this.dataGrid1.Name = "dataGrid1"; 
this.dataGrid1.Size = new System.Drawing.Size(484, 284); 
this.dataGrid1.TabIndex = 60; 
this.dataGrid1.MouseDown += new 
System.Windows.Forms.MouseEventHandler(this.dataGrid1_MouseDown); 
// 
// btn_delete 
// 
this.btn_delete.FlatStyle = System.Windows.Forms.FlatStyle.System; 
this.btn_delete.Location = new System.Drawing.Point(56, 8); 
this.btn_delete.Name = "btn_delete"; 
this.btn_delete.Size = new System.Drawing.Size(75, 23); 
this.btn_delete.TabIndex = 62; 
this.btn_delete.Text = "Delete"; 
this.btn_delete.Click += new System.EventHandler(this.btn_delete_Click); 
// 
// btn_delete_all 
// 
this.btn_delete_all.FlatStyle = System.Windows.Forms.FlatStyle.System; 
this.btn_delete_all.Location = new System.Drawing.Point(136, 8); 
this.btn_delete_all.Name = "btn_delete_all"; 
this.btn_delete_all.Size = new System.Drawing.Size(75, 23); 
this.btn_delete_all.TabIndex = 63; 
this.btn_delete_all.Text = "Delete All"; 
this.btn_delete_all.Click += new 
System.EventHandler(this.btn_delete_all_Click); 
// 
// txt_message_index 
// 
this.txt_message_index.Location = new System.Drawing.Point(8, 8); 
this.txt_message_index.Name = "txt_message_index"; 
this.txt_message_index.Size = new System.Drawing.Size(40, 20); 
this.txt_message_index.TabIndex = 64; 
// 
// Delete 
// 
this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); 
this.ClientSize = new System.Drawing.Size(504, 478); 
this.Controls.Add(this.txt_message_index); 
this.Controls.Add(this.btn_delete_all); 
this.Controls.Add(this.btn_delete); 
this.Controls.Add(this.dataGrid1); 
this.Name = "Delete"; 
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; 
this.Text = "Delete"; 
this.Load += new System.EventHandler(this.Delete_Load); 
((System.ComponentModel.ISupportInitialize)(this.dataGrid1)).EndInit(); 
this.ResumeLayout(false); 
this.PerformLayout(); 
 } 
 #endregion 
 privatevoid Delete_Load(object sender, System.EventArgs e) 
 { 
 dataGrid1.PreferredColumnWidth=100; 
 dt.Columns.Add("Index",typeof(int)); 
 dt.Columns.Add("Sender",typeof(string)); 
 dt.Columns.Add("Time",typeof(string)); 
 dt.Columns.Add("Message",typeof(string)); 
 T r a n g | 157 
Đồ án tốt nghiệp 
 ReadMessage(); 
 } 
 privatevoid ReadMessage() 
 { 
 Cursor.Current = Cursors.WaitCursor; 
 string storage = GetMessageStorage(); 
 try 
 { 
 // Read all SMS messages from the storage 
 DecodedShortMessage[] messages = 
CommSetting.comm.ReadMessages(PhoneMessageStatus.All, storage); 
 foreach(DecodedShortMessage message in messages) 
 { 
 ShowMessage(message.Data,message.Index); 
 } 
 } 
 catch(Exception ex) 
 { 
 MessageBox.Show(ex.Message); 
 } 
 Cursor.Current = Cursors.Default; 
 } 
 privatevoid BindGrid(SmsPdu pdu,int index) 
 { 
 DataRow dr=dt.NewRow(); 
 SmsDeliverPdu data = (SmsDeliverPdu)pdu; 
 dr[0]=index.ToString(); 
 dr[1]=data.OriginatingAddress.ToString(); 
 dr[2]=data.SCTimestamp.ToString(); 
 dr[3]=data.UserDataText; 
 dt.Rows.Add(dr); 
 dataGrid1.DataSource=dt; 
 } 
 privatevoid ShowMessage(SmsPdu pdu,int index) 
 { 
 if (pdu isSmsSubmitPdu) 
 { 
 // Stored (sent/unsent) message 
 SmsSubmitPdu data = (SmsSubmitPdu)pdu; 
 return; 
 } 
 if (pdu isSmsDeliverPdu) 
 { 
 // Received message 
 SmsDeliverPdu data = (SmsDeliverPdu)pdu; 
 BindGrid(pdu,index); 
 return; 
 } 
 if (pdu isSmsStatusReportPdu) 
 { 
 // Status report 
 SmsStatusReportPdu data = (SmsStatusReportPdu)pdu; 
 T r a n g | 158 
Đồ án tốt nghiệp 
 return; 
 } 
 } 
 privatestring StatusToString(PhoneMessageStatus status) 
 { 
 // Map a message status to a string 
 string ret; 
 switch(status) 
 { 
 casePhoneMessageStatus.All: 
 ret = "All"; 
 break; 
 casePhoneMessageStatus.ReceivedRead: 
 ret = "Read"; 
 break; 
 casePhoneMessageStatus.ReceivedUnread: 
 ret = "Unread"; 
 break; 
 casePhoneMessageStatus.StoredSent: 
 ret = "Sent"; 
 break; 
 casePhoneMessageStatus.StoredUnsent: 
 ret = "Unsent"; 
 break; 
 default: 
 ret = "Unknown (" + status.ToString() + ")"; 
 break; 
 } 
 return ret; 
 } 
 privatestring GetMessageStorage() 
 { 
 string storage = PhoneStorageType.Sim; 
 return storage; 
 } 
 privatevoid btn_delete_all_Click(object sender, System.EventArgs 
e) 
 { 
 if (!Confirmed()) return; 
 Cursor.Current = Cursors.WaitCursor; 
 string storage = GetMessageStorage(); 
 try 
 { 
 // Delete all messages from phone memory 
 CommSetting.comm.DeleteMessages(DeleteScope.All, 
storage); 
 dt.Clear(); 
 dataGrid1.DataSource=dt; 
 } 
 catch(Exception ex) 
 { 
 MessageBox.Show(ex.Message); 
 } 
 Cursor.Current = Cursors.Default; 
 } 
 privatebool Confirmed() 
 { 
 T r a n g | 159 
Đồ án tốt nghiệp 
 return (MessageBox.Show(this, "Really?", "Warning", 
MessageBoxButtons.YesNo, MessageBoxIcon.Warning) 
 == DialogResult.Yes); 
 } 
 privatevoid dataGrid1_MouseDown 
 (object sender, System.Windows.Forms.MouseEventArgs e) 
 { 
 System.Windows.Forms.DataGrid.HitTestInfo myHitTest; 
 // Use the DataGrid control's HitTest method with the x 
and y properties. 
 myHitTest = dataGrid1.HitTest(e.X,e.Y); 
 txt_message_index.Text=dataGrid1[myHitTest.Row 
,0].ToString(); 
 } 
 privatevoid btn_delete_Click(object sender, System.EventArgs e) 
 { 
 if( txt_message_index.Text.Equals("")==true) 
 { 
 MessageBox.Show("Please Click on 
Grid","Message",MessageBoxButtons.OK,MessageBoxIcon.Information); 
return; 
 } 
 int index; 
 try 
 { 
 index = int.Parse(txt_message_index.Text); 
 } 
 catch(Exception ex) 
 { 
 MessageBox.Show(ex.Message); 
 return; 
 } 
 if (!Confirmed()) return; 
 Cursor.Current = Cursors.WaitCursor; 
 string storage = GetMessageStorage(); 
 try 
 { 
 // Delete the message with the specified index from 
storage 
 CommSetting.comm.DeleteMessage(index, storage); 
 MessageBox.Show("Message With Index " + index + " 
Deleted","Message",MessageBoxButtons.OK,MessageBoxIcon.Information); 
 } 
 catch(Exception ex) 
 { 
 MessageBox.Show(ex.Message); 
 } 
 Cursor.Current = Cursors.Default; 
 dt.Clear(); 
 dataGrid1.DataSource=null; 
 ReadMessage(); 
 } 
 } 
} 
 T r a n g | 160 
Đồ án tốt nghiệp 
TÀI LIỆU THAM KHẢO 
[1] Nguyễn Trung Chính, “Tập lệnh AT của module SIM508 dùng cho SMS”, 2009 
[2] Nguyễn Trọng Kiên - Phạm Văn Nam, “Điều khiển thiết bị từ xa qua tin nhắn 
SMS bằng máy tính”,Đại học Sư Phạm Kỹ Thuật TPHCM, 2009 
[3] Nguyễn Quang Ninh, “Nghiên cứu công nghệ SMS – Xây dựng hệ thống tra cứu 
điểm qua mạng điện thoại di động”,Đại học Sư Phạm TPHCM, 2005 
[4]Nguyễn Đình Phú, “Giáo trình Vi xử lý 1”,Đại học Sư Phạm Kỹ Thuật TPHCM, 
2006 
[5] Trần Phạm Thanh Tùng, C# Fast Food, Năm 2008 
[6] “AT Command Interface Guide”,WAVECOM, 2006 
[7]GSM 07.05, ver 5.5.0 - Use of Data Terminal Equipment - Data Circuit 
Terminating Equipment (DTE - DCE) interface for Short Message Service (SMS) 
and Cell Broadcast Service (CBS) 
[8] GSM07.07, ver 5.0.0 - AT command set for GSM Mobile Equipment (ME) 
[9] SMS source samples (for GSM phones),  
[10] How To Send and Receive SMS using GSM Modem, www.codeproject.com.vn 
[11] GSM Modem Userguide, www.inet.vn 
[12] Bảng mãASCCII,  
Website: www.pcworld.com.vn, www.codeproject.com.vn