[SOCKET][TCP] Problème de lecture d'un inputStream entre chaque envoi de donnée
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.
AU niveau code voici ce que j'ai fais dans un premier temps :
Code:
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:
1 2 3 4
|
//receive data 1
byte[] bytes;
bytes = in.readAllBytes(); // get 3 byte |
Par
Changement N° 1
Code:
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);
} |
ou par
Changement N° 2
Code:
1 2 3 4
|
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
baos.write(buffer,0,in.read(buffer)); |
mais cela ne change rien, l'inputStream est toujours vide après la première lecture.
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:
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 :D