Bonjour � tous,
j'ai besoin de lire un inputStream, sous forme de byte[], apr�s chaque envoi de byte[]dans un outpuStream.
Mais apr�s la premi�re lecture de l'inputstream, celui ci est toujours vide, sauf dans certains cas que je d�cris ci-dessous
Pour l'information, je ne connais pas le nombre de byte qui me sera retourner.
Je n'ai pas la main sur le serveur contact�, celui ci semble r�pondre plus ou moins rapidement suivant les donn�es envoy�es.
Voici deux cheminement que j'obtiens actuellement, et le 3eme ce que je souhaite.
- Cheminement 1 : je ne lis l'inputstream qu'� la toute fin
-ouverture du socket
-Envoie data1 � l'OutputStream (Le serveur retourne 3 byte)
-Envoie data2 � l'OutputStream (Le serveur retourne 5 byte)
-Envoie data3 � l'OutputStream (Le serveur retourne 10 byte)
-Lecture de l'inputStream (je re�ois 18 bytes 3+5+10)
- Cheminement 2 : je lis l'inputstream entre chaque envoie � l'outstream
-ouverture du socket
-Envoie data1 � l'OutputStream (Le serveur retourne 3 byte)
-Lecture de l'inputStream (je re�ois 3 bytes)
-Envoie data2 � l'OutputStream (Le serveur retourne 5 byte)
-Lecture de l'inputStream (je re�ois 0 bytes)
-Envoie data3 � l'OutputStream (Le serveur retourne 10 byte)
-Lecture de l'inputStream (je re�ois 0 bytes)
- Ce que je souhaite :
-ouverture du socket
-Envoie data1 � l'OutputStream (Le serveur retourne 3 byte)
-Lecture de l'inputStream (je re�ois 3 bytes)
-Envoie data2 � l'OutputStream (Le serveur retourne 5 byte)
-Lecture de l'inputStream (je re�ois 5 bytes)
-Envoie data3 � l'OutputStream (Le serveur retourne 10 byte)
-Lecture de l'inputStream (je re�ois 10 bytes)
AU niveau code voici ce que j'ai fais dans un premier temps :
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 Socket socket = new Socket("xxx.xxx.xxx.xxx", 1234); InputStream in = socket.getInputStream(); OutputStream out = socket.getOutputStream(); //Envoie data 1 out.write(byteArray1); out.flush(); //réception data 1 byte[] bytes; bytes = in.readAllBytes(); // renvoie 3 byte //Envoie data 2 out.write(byteArray2); out.flush(); //réception data 2 byte[] bytes; bytes = in.readAllBytes(); //renvoie 0 byte au lieu de 5 ... out.close(); int.close(); socket.close();
j'ai essay� de changer la partie lecture de l'inpustream suivante :
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4 //receive data 1 byte[] bytes; bytes = in.readAllBytes(); // get 3 byte
Par
Changement N� 1
ou par
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8 ByteArrayOutputStream baos = new ByteArrayOutputStream(); int nRead; byte[] buffer = new byte[1024]; while ((nRead = in.read(buffer , 0, buffer.length)) != -1) { baos.write(buffer , 0, nRead); }
Changement N� 2
mais cela ne change rien, l'inputStream est toujours vide apr�s la premi�re lecture.
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4 ByteArrayOutputStream baos = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; baos.write(buffer,0,in.read(buffer));
La seule fa�on que j'ai trouv� pour l'instant pour que cela fonctionne
c'est d'utiliser un Thread.sleep avec le code du Changement N� 2, mais cela ne me semble pas une solution tr�s propre.
Par exemple ce code fait bien ce que je souhaite
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 Socket socket = new Socket("xxx.xxx.xxx.xxx", 1234); InputStream in = socket.getInputStream(); OutputStream out = socket.getOutputStream(); //Envoie data 1 out.write(byteArray1); out.flush(); //réception data 1 Thread.sleep(5000); ByteArrayOutputStream baos = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; baos.write(buffer,0,in.read(buffer)); //je récupère bien 3 byte //Envoie data 2 out.write(byteArray2); out.flush(); //réception data 2 Thread.sleep(5000); ByteArrayOutputStream baos2 = new ByteArrayOutputStream(); byte[] buffer2 = new byte[1024]; baos2.write(buffer2,0,in.read(buffer2)); //je récupère bien 5 byte ... out.close(); int.close(); socket.close();
J'esp�re avoir �t� assez clair et ne pas m'�tre tromp� de section du forum
Merci d'avance de votre aide![]()
Partager