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
|
public static void main(String[] args) throws IOException, InterruptedException {
private final BlockingQueue<ByteBuffer> queue = new ArrayBlockingQueue<ByteBuffer>(1);
private DatagramChannel dc;
dc=DatagramChannel.open();
dc.bind(null);
private final Thread listener = new Thread(() -> {
ByteBuffer bufferReceive = ByteBuffer.allocate(BUFFER_SIZE);
while (!Thread.interrupted()) {
try {
bufferReceive.clear();
receive(bufferReceive);
/*svp pourquoi si je fais
*bufferReceive.flip();
*queue.put(bufferReceive);
*ça ne marche pas?j'ai une erreur de type ByteBufferUnderFlowException.
*/
queue.put(bufferReceive.duplicate());//et ici quelqu'un peut m'expliquer svp pourquoi ça marche avec duplicate()? et quel est l'intérêt?
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
listener.start();
ByteBuffer bufferToSend = createPacket(requestNumber, s, cs);
bufferToSend.flip();
send(bufferToSend);
ByteBuffer bufferResponse = ByteBuffer.allocate(BUFFER_SIZE);
bufferResponse = queue.poll(TIMEOUT, TimeUnit.MILLISECONDS);
} |
Partager