Bonjour à tous et merci de vous être penché sur mon problème !
Le but de mon programme est de simuler un bouchon. Je reçois une trame d'une plate forme AIX, et je la lui renvoie telle quelle. A priori, rien de complexe !
Pour cela, j'utilise un ServerSocket et un objet BufferedReader pour récupérer mes caractères.
Voici la cinématique de mon problème :
Le client ouvre une session, envoie son message, et mon programme serveur, doit répondre.
Lorsque le serveur reçoit la trame, il ne la renvoie que lorsque le client signale sa fermeture de session pour cause de timeout.
Visiblement, la méthode readLine() reste à attendre un caractère bien précis (de fin de ligne probablement) qui n'arrive pas dans la requête de départ du client.
Si on fait un read() simple qui renvoie un int du premier caractère de la chaine, pas de problème, le programme continue et renvoie son caractère. Malheureusement, on ne peut pas faire de read() plusieurs fois sur le même buffer, car à la première lecture il se considère stocké et disparait (null pointer exception).
Pouvez-vous m'aider ???
Pour info, voici les sources du programme server :
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 import java.io.*; import java.net.*; public class bouchon { public static void main(String[] args) throws Exception { try { ServerSocket ecoute = new ServerSocket(53986, 1); Socket service = (Socket) null; byte tab[]=null; while (true) { System.out.print("\n\nEn attente..."); System.out.println("Ecoute...\n"); service = ecoute.accept(); System.out.println("Lecture... \n"); BufferedReader plec = new BufferedReader(new InputStreamReader(service.getInputStream())); System.out.println("CHAINE début lecture: \n"); String str = new String(plec.readLine());//plec.readLine(); // lecture du message System.out.println("CHAINE lue: \n" + str); System.out.println("Ecriture... \n"); PrintWriter pred = new PrintWriter( new BufferedWriter( new OutputStreamWriter(service.getOutputStream())), true); StringBuffer Sb = new StringBuffer(str); pred.println(str); // renvoi d'un écho System.out.println("Sortie ASCII : \n"+Sb.toString()); service.close(); } } catch (Exception e) { System.out.println(e);// traitement d'erreur } } } }
Partager