Bonjour,
Je fais transiter des bytes par le réseau, et la difficulté que j'ai c'est de réussir à bloquer les appels read() .
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 ServerSocket socket = new ServerSocket(12345); Socket clientSocket; try { clientSocket = socket.accept(); System.out.println("Un nouveau client"); InputStream in2 = clientSocket.getInputStream(); byte fixedByte, id, size; while(true) { System.out.println("reception du message"); fixedByte = (byte) in2.read(); id = (byte) in2.read(); size = (byte) in2.read(); System.out.println(size); ByteBuffer buf = ByteBuffer.allocate(size+3); byte[] b = new byte[size]; buf.put(fixedByte); buf.put(id); buf.put(size); in2.read(b); buf.put(b); buf.rewind(); System.out.println(buf); } } catch (Exception e) { e.printStackTrace(); } }
L'affichage
serveur
Un nouveau client
// iteration 1
reception du message
52
// le buffer est rempli avec la taille exacte
java.nio.HeapByteBuffer[pos=0 lim=55 cap=55]
// iteration 2
reception du message
// le read() retourn -1
-1
// exception lors ByteBuffer.allocate(size)
java.lang.NegativeArraySizeException
at MainServer.main(MainServer.java:96)
Lors de la 1er itération , les données sont bien récupérés.
Cependant, lors de la 2eme itération, le read() retourn -1,
je ne souhaite pas faire d'attente actives.
Comment je peux m'en sortir?
Merci d'avance.
Partager