From aaebae78508c0414944a9fa41e3d4ae22a253747 Mon Sep 17 00:00:00 2001 From: Xeon0X Date: Mon, 31 Mar 2025 17:15:17 +0200 Subject: [PATCH] Refactor UDP client-server communication flow --- .../main/java/clientserver/ClientHandler.java | 66 ++++++++++++------- 1 file changed, 41 insertions(+), 25 deletions(-) diff --git a/app/src/main/java/clientserver/ClientHandler.java b/app/src/main/java/clientserver/ClientHandler.java index e586440..a9aa42d 100644 --- a/app/src/main/java/clientserver/ClientHandler.java +++ b/app/src/main/java/clientserver/ClientHandler.java @@ -11,27 +11,48 @@ public class ClientHandler { int port = 6666; boolean running = true; DatagramSocket socketServer = null; + try { + socketServer = new DatagramSocket(null); + // 2 - Réservation du port + InetSocketAddress address = new InetSocketAddress( + "localhost", + port + ); + socketServer.bind(address); + } catch (Exception e) { + e.printStackTrace(); + } while (running) { try { // 1 - Création du canal - socketServer = new DatagramSocket(null); - // 2 - Réservation du port - InetSocketAddress address = new InetSocketAddress( - "localhost", - port - ); - socketServer.bind(address); + // 3 - Recevoir byte[] recues = new byte[1024]; // tampon de réception DatagramPacket receivedPacket = new DatagramPacket( recues, recues.length ); - socketServer.receive(receivedPacket); + InetAddress clientAddress = receivedPacket.getAddress(); + int clientPort = receivedPacket.getPort(); + System.out.println( + "Nouveau client : @" + clientAddress + ":" + clientPort + ); + DatagramSocket socket = new DatagramSocket(); // Reserve new port - Thread thread = new Thread(() -> createThread(receivedPacket)); + String response = "PORT:" + socket.getLocalPort(); + System.out.println(response); + byte[] envoyees; // tampon d'émission + envoyees = response.getBytes(); + DatagramPacket packetToSend = new DatagramPacket( + envoyees, + envoyees.length, + clientAddress, + clientPort + ); + socketServer.send(packetToSend); + Thread thread = new Thread(() -> createThread(socket)); thread.start(); } catch (Exception e) { System.err.println(e); @@ -41,25 +62,20 @@ public class ClientHandler { socketServer.close(); } - public static void createThread(DatagramPacket packet) { + public static void createThread(DatagramSocket socketClientThread) { try { - InetAddress clientAddress = packet.getAddress(); - int clientPort = packet.getPort(); - System.out.println( - "Nouveau client : @" + clientAddress + ":" + clientPort + byte[] recues = new byte[1024]; // tampon de réception + DatagramPacket receivedPacket = new DatagramPacket( + recues, + recues.length ); - DatagramSocket socket = new DatagramSocket(); // Reserve new port - - String response = "PORT:" + socket.getLocalPort(); - byte[] envoyees; // tampon d'émission - envoyees = response.getBytes(); - DatagramPacket packetToSend = new DatagramPacket( - envoyees, - envoyees.length, - clientAddress, - clientPort + socketClientThread.receive(receivedPacket); + String message = new String( + receivedPacket.getData(), + 0, + receivedPacket.getLength() ); - socket.send(packetToSend); + System.out.println("Received message: " + message); } catch (Exception e) { System.err.println(e); }