Bonjour tout le monde. Je commence a peine a manipuler les sockets et dès le début je galère déja lol ! En bref j'ai reussi a etablir une connexion entre mon client en AS3 , et mon serveur en JAVA (Youpi !!!). Maintenant j'essaye d'échanger des données entre ces derniers, et là tout se complique. Je n'arrive pas à comprendre pourquoi dans mon code AS3 la premiere méthode fonctionne mais pas la deuxieme. Je rentre dans le detail :
Première méthode :
Je connecte mon socket , j'ecoute mon socket, s'il se connecte(EVENT.CONNECT) j'envoie des entier à mon serveur :
Code AS3 : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 private function socketConnect(event:Event):void { trace("Connected: " + event); socket.writeInt(32); }
et même celui ci fonctionne :
Code AS3 : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 private function socketConnect(event:Event):void { trace("Connected: " + event); socket.writeInt(32); socket.writeInt(35); socket.writeInt(8); socket.writeInt(12); socket.writeInt(80); }
coté serveur je lis les donées reçu à l'aide de readInt(). Tout s'affiche correctement dans la console :
Deuxieme méthode :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 32 35 8 12 80
Maintenant au lieu ce soit à l'evenement CONNECT , je met ce même code dans l'evenement CLICK d'un bouton :
Code AS3 : Sélectionner tout - Visualiser dans une fenêtre à part send.addEventListener(MouseEvent.CLICK, sendPaquet);
Code AS3 : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 private function sendPaquet(event:MouseEvent):void{ socket.writeInt(32); socket.writeInt(35); socket.writeInt(8); socket.writeInt(12); socket.writeInt(80); }
Et bien là le console n'affiche strictement rien ! Comme si elle ne recevait strictement rien. Je pense que le problème se trouve au niveau du serveur. Qui lit si le socket envoit des données dès sa connexion. Une fois qu'il a tout lut, il ne lit plus rien. Mais d'où viendrais le problème ? J'y ai passé toute la journée sans trouver la réponse , la je bloque, j'ai essayer la méthode flush() , mais le resultat est le même. Pouvez vous m’éclaircir ?
Voici le code de la class MAIN du CLIENT :
Code AS3 : 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 public class Main extends Sprite { public var boutonConnct:Bouton = new Bouton("Connect", 400, 25); public var boutonDecnnct:Bouton = new Bouton("Deconnect", 400, 25); public var send:Bouton = new Bouton("Envoyer", 300, 25); public var socket:Socket = new Socket(); public function Main() { if (stage) init(); else addEventListener(Event.ADDED_TO_STAGE, init); } private function init(e:Event = null):void { removeEventListener(Event.ADDED_TO_STAGE, init); addChild(boutonConnct); addChild(send); boutonConnct.addEventListener(MouseEvent.CLICK, connectToServer); boutonDecnnct.addEventListener(MouseEvent.CLICK, DiscoToServer); send.addEventListener(MouseEvent.CLICK, sendPaquet); } private function connectToServer(event:MouseEvent):void { trace("Connexion au serveur...."); removeChild(boutonConnct); socket.addEventListener(Event.CONNECT, socketConnect); socket.addEventListener(Event.CLOSE, socketClose); socket.addEventListener(IOErrorEvent.IO_ERROR, socketError); socket.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityError); socket.addEventListener(ProgressEvent.SOCKET_DATA, _onSocketDataHandler); try { socket.connect("127.0.0.1", 2030); }catch (e:Error) { trace("Error on connect: " + e); } addChild(boutonDecnnct); } private function DiscoToServer(event:MouseEvent):void { trace("Deconnection au serveur..."); removeChild(boutonDecnnct); addChild(boutonConnct); socket.close(); } private function socketConnect(event:Event):void { trace("Connected: " + event); } private function socketClose(event:Event):void { trace("Connection closed: " + event); } private function socketError(event:IOErrorEvent):void { trace("Socket error: " + event); } private function securityError(event:SecurityErrorEvent):void { trace("Security error: " + event); } private function sendPaquet(event:MouseEvent):void { socket.writeInt(32); socket.writeInt(35); socket.writeInt(8); socket.writeInt(12); socket.writeInt(80); } } }
Et voici le code de la class MAIN du serveur :
Code JAVA : 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 public class Main { public static void main(String[] args) throws IOException { ServerSocket serverSocket = null; Socket connection = new Socket(); InputStream in = null; boolean listening = true; try { serverSocket = new ServerSocket(2030); System.err.println("The server is now bound to port."); } catch (IOException e) { System.err.println("Could not bind server to port."); System.exit(-1); } while (listening) { connection = serverSocket.accept(); if(connection!=null) { System.err.println("Connection to client has been established."); in = connection.getInputStream(); listening = false; } } while (!listening) { DataInputStream DataInput = new DataInputStream(in); System.out.println("Recu " +DataInput.readInt()); } } }
J'espère que quelqu'un sera m'expliquer car la je ne comprend absolument pas pourquoi ça ne marche pas. En vous remerciant !
Partager