Этот вопрос не является C# конкретным; скорее это вопрос AT команд.
После отправки SMS вы получите ответ от модема, что-то вроде этого:
+CMGS: {sms id, 0 to 255}
OK
В этом случае, если Сервисный центр успешно доставил SMS, модем вернет этот ответ:
+cds: {some id which does not matter} {PDU status report}
Вам нужно просто декодировать этот PDU, чтобы получить отчет о состоянии, идентификатор исходного SMS и другие полезные данные. Если идентификатор отправленного SMS-сообщения и идентификатора из отчета о состоянии совпадают, у вас есть отчет о состоянии именно для вашего сообщения.
Примечание: если вы удалите сообщение из хранилища модема до получения отчета о доставке, вы получите отчет, который будет содержать всю обычную информацию, но статус доставки, скорее всего, будет 71 вместо 0.
Я сам использовал этот подход, основываясь на этом ответе , и он работает.
Edit 1: вы обрабатываете чтение RS232 синхронно, что я действительно не рекомендую, функция чтения должна запускаться автоматически, когда данные доступны в порту, что-то вроде этого:
private string SerialDataReceived = string.Empty
private void button1_Click(object sender, EventArgs e)
{
// new instance of the COM port
port = new SerialPort(ComPort, 115200, Parity.None, 8, StopBits.One);
// start port lessener
port.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived);
// Begin communications and wait for nad to reboot completly
port.Open();
//send your AT Commands
port.Write("ATE0\r\n");
// check the response 'if Command is successfull it reply with something +Ok'
if(SerialDataReceived.ToLower().Contains("ok"))
}
//event will be fired each time a new data are available in the port
private void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
// Show all the incoming data in the port's buffer
SerialDataReceived += port.ReadExisting();
}
теперь в функции отправки вы должны проверить, есть ли в конце ответ, содержащий + CMGS :,