Bonjour
Je developpe une application en c# et je desire que les utilisateurs puissent avoir une possibilite d'envoyer un sms à mon application a partir d'un modem.
Comment faire ?
Merci.
Bonjour
Je developpe une application en c# et je desire que les utilisateurs puissent avoir une possibilite d'envoyer un sms à mon application a partir d'un modem.
Comment faire ?
Merci.
Bonjour vkitumaini,
Le principe est assez simple, la réalisation est plus compliquée et surtout dépendantes des connaissances que vous avez en commandes AT.
Pour faire simple les commandes AT sont les commandes reçues et envoyées par votre modem.
La communication avec votre modem ne pourra se faire qu'en commandes AT.
Votre application va communiquer avec votre modem via un port série.
Vous devrez donc dans votre application établir la communication avec votre modem en utilisant la classe Serialport
C'est ensuite dans la méthode SMSPort_DataReceived que vous allez décrypter les commandes AT envoyées par votre modem et identifier les éventuels SMS reçu afin de les utiliser.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 public class SMS { private SerialPort serialPort; public delegate void DataReceivedEventHandler(string Message); public event DataReceivedEventHandler DataReceived; /// <summary> /// Constructeur /// </summary> /// <param name="COMMPORT">Port COM</param> public SMS(string COMMPORT) { // Initialisation des popriétés du port série serialPort = new SerialPort(); serialPort.PortName = COMMPORT; serialPort.BaudRate = 9600; serialPort.Parity = Parity.None; serialPort.DataBits = 8; serialPort.StopBits = StopBits.One; serialPort.Handshake = Handshake.RequestToSend; serialPort.DtrEnable = true; serialPort.RtsEnable = true; // Ajout de l'event de la reception d'une donnée sur le port série serialPort.DataReceived += new SerialDataReceivedEventHandler(SMSPort_DataReceived); }
Et là effectivement tout dépend de vos connaissances sur le sujet.
Je vous met à titre indicatif la méthode que nous utilisons qui décrypte les commandes AT reçues et qui, je l’espère vous permettra de mieux aborder votre problèmatique.
En espérant vous avoir aiguiller sur la bonne piste.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98 void SMSPort_DataReceived(object sender, SerialDataReceivedEventArgs e) { // Attente pour que toutes les données soient écrites sur le port COM Thread.Sleep(Properties.Settings.Default.attentePortComRecep); CSql bdd = new CSql(Properties.Settings.Default.srvIntranet, Properties.Settings.Default.bddIntranet); string SerialIn = null; byte[] RXBuffer = new byte[serialPort.ReadBufferSize + 1]; ; // Lecture des données serialPort.Read(RXBuffer, 0, serialPort.ReadBufferSize); SerialIn = SerialIn + System.Text.Encoding.ASCII.GetString(RXBuffer).Replace("\0", ""); // Si la lecture ne se termine pas pas un retour à la ligne ou un > c'est quelle n'est pas lue complètement while (!SerialIn.EndsWith("\r\n") && SerialIn.EndsWith("\r\n>")) { // On recupere à nouveau les données SerialIn = SerialIn + System.Text.Encoding.ASCII.GetString(RXBuffer).Replace("\0", ""); Thread.Sleep(100); } // Remplacement des retours à la ligne par des # afin de pouvoir utiliser la fonction Split SerialIn = SerialIn.Replace("\r\n", "#"); // Découpe de la chaine lue avec des # comme caractères de séparation string[] SerialIns = SerialIn.Split('#'); // Lors de la lecture de l'accusé de reception la taille doit etre de 51 caracteres if (SerialIns[SerialIns.Length - 1].StartsWith("00")) { if (SerialIns[SerialIns.Length - 1].Length < 51) { SerialIn = SerialIn + serialPort.ReadTo("\r\n"); } } // Si il y a eu relecture on redécoupe la chaine SerialIn = SerialIn.Replace("\r\n", "#"); SerialIns = SerialIn.Split('#'); // Il arrive qu'il y est plusieurs ligne de récupérées foreach (string In in SerialIns) { if (In != "") { // Debug StreamWriter wr = new StreamWriter(Environment.CurrentDirectory + "\\log.txt", true); wr.WriteLine(In); wr.Close(); // En attente de la suite du message if (In.Contains(">") == true) { _ContSMS = true; dataReceived.Set(); } // Erreur if (In.Contains("+CMS ERROR:") == true || In.Contains("ERROR") == true) { _Error = true; if (Error != null) Error("Erreur lors de l'envoi"); dataReceived.Set(); } // Message envoyé -> récupération de l'ID de l'envoi if (In.Contains("+CMGS: ") == true) { _iIDSMS = Convert.ToInt32(In.Replace("+CMGS: ", "")); _Continue = true; if (IDReceived != null) IDReceived(In.Replace("+CMGS: ", "")); if (Sending != null) Sending(true); dataReceived.Set(); } // Accusé de reception if (In.StartsWith("+CDS: ")) { string[] sAccuse = In.Split(','); if (sAccuse.Length > 7) { // Affectation en base en fonction de l'état ... } } } if (DataReceived != null) if (In != "") DataReceived(In); } }
Mvk
bonjour MvK0610
j'ai essaie le code ça marche vraiement merci.
Mon application envoi et reçoit des sms via mon Modem edge sans problème.
J'aimerais aussi savoir avec combien d'sms réçus simultanément mon modem peut cracker parce que plusieurs personne devraient evoyé des sms à cette application;
merci.
depuis longtemps,je cherche une solution pour recevoir un sms par mon application développée en c sharp et l'enregistrer dans une table de ma base de données,
j'ai appliquer votre code,et j'ai trouvé quelques erreurs,et je souhaite bien m'aider à montrer comment enregistrer le sms reçus dans la base de données et afficher la liste des sms reçus.
cordialement
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager