Bonjour,
Je développe une Applet Java qui a pour but de remplacer une ancienne console ASCII. Le système auquel je suis relié envoie donc des caractères CR ou LF tantôt séparés tantôt à la suite (CRLF pour nouvelle ligne).
Je voudrais pouvoir traiter tous les cas.
Je reçois ces caractères d'une DataInputStream
Je décode donc le flot d'octet que je reçois de la manière suivante
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 public tcpip(InetAddress ipa, int port) { Socket s1 = null; try { // Open the socket s1 = new Socket(ipa.getHostAddress(), port); } catch (IOException e) { System.out.println("Error opening socket"); return; } s = s1; try { // Create an input stream dis = new DataInputStream(new BufferedInputStream(s.getInputStream())); } catch(Exception ex) { System.out.println("Error creating input stream"); } try { // Create an output stream dos = new DataOutputStream(new BufferedOutputStream(s.getOutputStream())); } catch(Exception ex) { System.out.println("Error creating output stream"); } Poll = new Thread (this); }
Mais durant mes tests, je m'aperçois que si tous se passe bien lorsque je reçois CR et LF séparément. Si je les reçois à la suite l'un de l'autre CRLF Java me fait sauter LF.
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 switch(CslText[CslIndex]) { case CAR_ESC: TemoinESC=true; break; case CAR_TAB: //Avance au prochain caractère console.DeplaceCurseur(+1); break; case CAR_BS: //Reculer Car. Précédent console.DeplaceCurseur(-1); break; case CAR_CR: //aller au début de ligne console.CurrentPosition=NbLigneCnsl*console.Xmax; console.FConsole.setCaretPosition(console.CurrentPosition); TemoinSL=true; break; case CAR_LF: //saut de ligne
D'où ma question: Comment forcer Java à traiter tous les caractères reçus?
Merci d'avance.
Partager