Bonjour, j'ai une application d'envoi et de reception de sms entre telephone portable et serveur. Quand le portable envoit, le serveur le recoit mais quand le serveur envoi, le portable ne recoit pas. que faut-il pour cela?
Bonjour, j'ai une application d'envoi et de reception de sms entre telephone portable et serveur. Quand le portable envoit, le serveur le recoit mais quand le serveur envoi, le portable ne recoit pas. que faut-il pour cela?
Salut ablayes,
pour pouvoir t'aider efficacement, on va avoir besoin d'un peu de ton code.
Mais à froid (et un peu au pifomètre), je dirais :
- soit que tu n'écoutes pas les sms entrant avec le bon port- soit que ton serveur n'envoie pas le sms avec le bon port- soit les deux à la fois
A plus
Voici le code:
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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183 import java.io.IOException; import javax.microedition.io.Connector; import javax.microedition.lcdui.Command; import javax.microedition.lcdui.CommandListener; import javax.microedition.lcdui.Display; import javax.microedition.lcdui.Displayable; import javax.microedition.lcdui.Form; import javax.microedition.lcdui.TextField; import javax.microedition.lcdui.Ticker; import javax.microedition.midlet.MIDlet; import javax.microedition.midlet.MIDletStateChangeException; import javax.wireless.messaging.BinaryMessage; import javax.wireless.messaging.Message; import javax.wireless.messaging.MessageConnection; import javax.wireless.messaging.MessageListener; import javax.wireless.messaging.TextMessage; public class TestSMS extends MIDlet implements CommandListener,MessageListener,Runnable { public static int thread = 0; Display affichage; Form ecran; // écran TextField login; TextField password; Ticker textDefile; MessageConnection mc,msg; BinaryMessage bmsg; Message rec; Byte[] data,mesrec1; String desc,mesrec; static final Command connCommand = new Command("Envoyer", Command.OK, 0); static final Command retourCommand = new Command("Retour", Command.BACK, 0); public TestSMS() { // TODO Auto-generated constructor stub } public void Lancer() throws IOException { affichage = Display.getDisplay(this); ecran = new Form("Authentification"); login = new TextField("Login ", "", 15, TextField.ANY); password = new TextField("Mot de passe", "", 15, TextField.PASSWORD); ecran.append(login); ecran.append(password); ecran.addCommand(connCommand); ecran.setCommandListener(this); affichage.setCurrent(ecran); } protected void destroyApp(boolean arg0) throws MIDletStateChangeException { // TODO Auto-generated method stub } protected void pauseApp() { // TODO Auto-generated method stub } protected void startApp() throws MIDletStateChangeException { try { Lancer(); } catch (IOException e) { e.printStackTrace(); } } public void Envoyer(String address, String text) throws IOException { try { MessageConnection mc =(MessageConnection) Connector.open("sms://+5550001:1234"); TextMessage tm = (TextMessage)mc.newMessage(MessageConnection.TEXT_MESSAGE); tm.setPayloadText(text); mc.send(tm); } catch (IOException e) {e.printStackTrace();} } public void commandAction(Command c, Displayable disp) { String label = c.getLabel(); if (label.equals("Envoyer")) { thread = 1; Thread t = new Thread(this); t.start(); } else {if (label.equals("Retour")) { thread = 2; Thread t1 = new Thread(this); t1.start(); } else { thread = 3; Thread t1 = new Thread(this); t1.start(); } } } public void run() { if (thread == 1 || thread == 0) { try { String textMess = ("#" + login.getString() + "#" + ((TextField)password).getString()); Envoyer(":1234",textMess.toString()); } catch (IOException e) { e.printStackTrace(); } } if (thread == 3) { notifyIncomingMessage(msg); } if (thread == 2) { try { Lancer(); } catch (IOException e) { e.printStackTrace(); } } } public void notifyIncomingMessage(MessageConnection mcon) { Message rec = null; listen("1234"); if (mc==mcon){ try { rec = mcon.receive(); if (rec instanceof TextMessage) { messageRecu((TextMessage)rec); } if (rec instanceof BinaryMessage) { messageRecu((BinaryMessage)rec); } } catch (IOException e) { e.printStackTrace(); } } } private void messageRecu(TextMessage rec2) { String mesrec =rec2.getPayloadText(); if(mesrec != null){ desc = mesrec.toString(); } affichage = Display.getDisplay(this); ecran = new Form("Message Recu"); ecran.append(desc); ecran.addCommand(retourCommand); ecran.setCommandListener(this); affichage.setCurrent(ecran); } private void messageRecu(BinaryMessage rec2) { byte[] mesrec1 =rec2.getPayloadData(); affichage = Display.getDisplay(this); ecran = new Form("Message Recu"); if(mesrec1 != null){ desc = "Autre"; } ecran.append(desc.toString()); ecran.addCommand(retourCommand); ecran.setCommandListener(this); affichage.setCurrent(ecran); } public void listen(String port){ try{ msg =(MessageConnection) Connector.open("sms://:" + port); msg.setMessageListener(this); } catch(Exception e){} } }
Miam, 180 lignes de code sans avoir utilisé la balise prévue pour... (©Bovino)
J'avais dit un peu de code
Plus sérieusement, à première vue ta fonction "listen" devrait effectivement bien écouter les SMS recus sur le tel avec le port passé en paramètre.
Maintenant, tu n'appelles cette fonction que dans notifyIncomingMessage().
Et pour que cette dernière soit elle même appelée, il faut que ta midlet recoive une Command avec un label différent de "Envoyer" ET de "Retour".
Est-ce que c'est effectivement le cas ?
Si oui, es-tu sûr que tout c'est bien passé (Exception??) ?
Tu pourrais mettre un peu plus d'affichage pour savoir où en est ta midlet (Exception levée ou pas - dans ton listen par exemple, ca serait cool de savoir si ca c'est mal passé ou pas).
Sinon la prochaine fois, essayes de faire un effort sur la présentation quand tu postes du code.
C'est entendu, je suis juste novice en la matiere et ne peux savoir ce qui peut t'etre util. Merci pour les conseils, je vais explorer la piste que vous m'indiquez...
Bonjour je viens me greffer à la discussion car je pense que jeter un coup d'oeil du cote du PushRegistry serait pas trop mal. Je pense qu'il faut que tu mettre un listener sur l'evenement de reception de SMS et ensuite traiter le SMS.
Bon courage
Effectivement, dans la plupart des cas le PushRegistry sera nécessaire puisque qu'il permet le lancement de l'application à la réception d'un SMS sur le port donné, au cas où l'appli ne serait pas déjà en train de tourner.
J'imagine que quand tu as fait tes tests, l'appli tournait sur ton tel (en ayant effectivement fais le setMessageListener).
Maintenant, si à l'avenir tu souhaites que ton appli soit lancée dès la réception d'un SMS visant ton appli, alors il te faudra impérativement passer par le PushRegistry comme le suggère tromaltsec.
Tiens nous au courant de l'évolution de la situation.
moi meme j'ai besoin de ce code si tu en as stp passe le moi! merci
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