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.