Salut à tous.
J'essaye de coder une appli air qui lance une animation après qu'un client se soit approché et scanné sa carte "cora" avec un code-barre.
Évidemment, question port-série, Flash c'est pas top ...
D'où la création d'un petit démon java, qui écoute le port série, ouvre un port TCP, et sur l'évènement SerialEvent de RXTX
envoie la code-barre à Flash via le port TCP.
Le problème, c'est que je n'arrive pas à envoyer les données vers Flash.
Es-ce que le "processus socket" peut être à l'initiative du serveur ?
Les exemples sur le net font plutôt preuve d'init des clients....
J'ai essayé via un Timer dans l'appli air d'envoyer une requête ttes les seconde, mais quand je débugge, je n'arrive pas bien à voir pourquoi ça s'arrête au niveau du processus d'échange.
Avec le code, ça sera plus clair ...
La méthode qui écoute SerialEvent et lance Communicate ( la connection socket est faites en amont et fonctionne ) :
Le code de communicate :
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 case SerialPortEvent.DATA_AVAILABLE : try { setsBarCode( (String) bFlux.readLine() ); System.out.println( "sBarCode, Serial : "+ sBarCode ); sktSrvr.communicate( getsBarCode(), jTxtARef ); } catch ( IOException e ) { System.out.println("Error: I/O Exception"); e.printStackTrace(); } break;
Le client Flash avec le Timer
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 public void communicate( String sBarCode, JTextArea jTxtA ) { System.out.println( "test" ); try { System.out.println( "sBarCode, SocketServer : "+ sBarCode ); BufferedReader in = new BufferedReader(new InputStreamReader(_connection.getInputStream())); PrintWriter out = new PrintWriter( _connection.getOutputStream(), true ); while( true ) { try { String line = in.readLine(); out.println(line); } catch (IOException e) { System.out.println("Read failed"); System.exit(-1); } } catch (IOException e) { e.printStackTrace(); } }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 private function onTimer( e:TimerEvent ):void { logger.log( "onTimer: " + i, this); i++; if( i > 2 ){ var s:String = "<?xml version='1.0' encoding='UTF-8'?><root>DATA<data></data></root>" _socket.send(s); } }
Donc j'ai bien une connexion, mais le code semble planter silencieusement au niveau de l'envoie de données : String line = in.readLine();
J'ai plus trop d'idée.
Partager