Maison >développement back-end >C++ >Pourquoi mon code C# n'envoie-t-il pas de SMS via un modem GSM à l'aide de System.IO.Ports ?
Cet article traite d'un problème courant : le code C# utilisant System.IO.Ports
ne parvient pas à envoyer des messages SMS via un modem GSM.
Le problème principal réside souvent dans le fait de s'appuyer sur Thread.Sleep()
au lieu de gérer correctement les réponses du modem. L'envoi de SMS robuste nécessite de lire et d'interpréter les retours du modem après chaque commande AT.
La norme V.250 (Chapitre 5) fournit les meilleures pratiques pour la gestion des commandes AT. Surtout, il met l'accent sur l'utilisation de r
pour la terminaison des commandes, pas Environment.NewLine
.
Pour les commandes ne nécessitant pas de réponse :
<code class="language-csharp">// Open serial port serialport.Open(); // Send command serialport.Write("AT+CMGF=1\r"); // Read and parse response string line; do { line = readLine(serialport); // Assumes a readLine function exists } while (!is_final_result_code(line)); // Assumes an is_final_result_code function exists</code>
La commande AT CMGS
, cependant, exige une réponse spécifique ("rn> ") avant l'envoi de la charge utile du SMS. Il est essentiel d'attendre cette invite.
Remplacer Thread.Sleep()
par un mécanisme qui attend le code de résultat final du modem est vital pour une exécution fiable des commandes AT. Cela garantit une confirmation précise du succès ou de l'échec de la commande, ce qui se traduit par un système SMS plus fiable.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!