Bonjour,

Je test la communication entre plusieurs programmes via des sockets. Et je me pose la question de la nécessité de procéder comme suis pour effectuer une lecture :

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
 
...
 
DataInputStream dis = null;
 
...
 
dis = new DataInputStream(serviceSocket.getInputStream());
 
...
 
// code pour la lecture
 
byte[] tempBytes = new byte[dis.readInt()];    // lit un int qui représente la longueur du message qui suit
int length = 0;
while(length < tempBytes.length){
	length += dis.read(tempBytes, length, tempBytes.length-length);
}
String msgRecu = new String(tempBytes, "ISO-8859-1");
plutot que comme ca :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
byte[] tempBytes = new byte[dis.readInt()];    // lit un int qui représente la longueur du message qui suit
dis.read(tempBytes, 0, tempBytes.length);
Je me demande si de faire des boucles comme ca est nécessaire ou si ca fait double emploi avec l'implémentaion des flux (haut niveau). Meme question pour l'envoi : Est il judicieux de faire une boucle afin de ne pas envoyer de trop gros message en une fois.

pour infos le code de l'ecriture

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
 
ByteArrayOutputStream baos = null;
DataOutputStream dos = null;
 
...
 
dos = new DataOutputStream(serviceSocket.getOutputStream());
baos = new ByteArrayOutputStream();
 
....
 
//code pour l'écriture
 
String toSend = "CONNECT";
baos.reset();
new DataOutputStream(baos).writeInt(toSend.length());
baos.write(toSend.getBytes("ISO-8859-1"));
dos.write(baos.toByteArray(), 0, baos.toByteArray().length);
dos.flush();
Merci, Fred.