Исправить ошибки в коде отправки SMS через GSM-модем - C#
Формулировка задачи:
Здравствуйте!
Недавно начал писать на c#. Поставили передо мной задачу отправки смс через gsm модем. Все бы ничего, но написанная простенькая программа не хочет работать, т.е. выполнять свою главную функцию - отправлять смс.
Ошибок в коде не показывает. Через hyper terminal работает.
Подскажите, что в этом коде не так? Почему не работает программа?
serialPort1 = new SerialPort("COM11");
string pN = "+380509343478";
string mess = "qwerty123";
serialPort1.Open();
serialPort1.WriteLine("AT");
System.Threading.Thread.Sleep(1000);
serialPort1.WriteLine("AT+CMGF=1");
System.Threading.Thread.Sleep(1000);
serialPort1.Write(String.Format("AT+CMGS=\"" + pN + "\""));
serialPort1.Write(String.Format(mess + "\x1A"));
System.Threading.Thread.Sleep(1000);
textBox1.Text = serialPort1.ReadExisting();
serialPort1.Close();
Переписал немного код, проверил, вроде работает. Проверял не с помощью gsm модема, а подключал обычный телефон. Все работало. Принес потестить на gsm модеме, запускаю, АТ команды работают, в ответ получаю ОК, но смс не приходят адресату. В чем может быть проблема?
private void button1_Click(object sender, EventArgs e)
{
string phoneNum = "+3809********";
string text = "test";
serialPort1 = new SerialPort();
SerialPort.GetPortNames();
foreach (string s in SerialPort.GetPortNames())
{
comboBox1.Items.Add(s);
}
serialPort1.PortName = comboBox1.SelectedItem.ToString();
serialPort1.Open();
if (serialPort1.IsOpen)
{
serialPort1.WriteLine("AT \r\n");
System.Threading.Thread.Sleep(1000);
serialPort1.Write("AT+CMGF=1 \r\n");
System.Threading.Thread.Sleep(1000);
serialPort1.Write(String.Format("AT+CMGS=\"{0}\"" + (Char)13, phoneNum));
serialPort1.Write(String.Format("{0}" + (Char)26 + (Char)13, text));
serialPort1.Encoding = Encoding.GetEncoding("windows-1251");
textBox1.Text = serialPort1.ReadExisting();
serialPort1.Close();
}
}Решение задачи: «Исправить ошибки в коде отправки SMS через GSM-модем»
textual
Листинг программы
System.Threading.Thread.Sleep(1000);