refactor: UDP client-server communication flow

This commit is contained in:
2025-03-31 17:15:17 +02:00
parent d82e10451d
commit b4ddf0dca4

View File

@@ -11,10 +11,7 @@ public class ClientHandler {
int port = 6666; int port = 6666;
boolean running = true; boolean running = true;
DatagramSocket socketServer = null; DatagramSocket socketServer = null;
while (running) {
try { try {
// 1 - Création du canal
socketServer = new DatagramSocket(null); socketServer = new DatagramSocket(null);
// 2 - Réservation du port // 2 - Réservation du port
InetSocketAddress address = new InetSocketAddress( InetSocketAddress address = new InetSocketAddress(
@@ -22,16 +19,40 @@ public class ClientHandler {
port port
); );
socketServer.bind(address); socketServer.bind(address);
} catch (Exception e) {
e.printStackTrace();
}
while (running) {
try {
// 1 - Création du canal
// 3 - Recevoir // 3 - Recevoir
byte[] recues = new byte[1024]; // tampon de réception byte[] recues = new byte[1024]; // tampon de réception
DatagramPacket receivedPacket = new DatagramPacket( DatagramPacket receivedPacket = new DatagramPacket(
recues, recues,
recues.length recues.length
); );
socketServer.receive(receivedPacket); 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(); thread.start();
} catch (Exception e) { } catch (Exception e) {
System.err.println(e); System.err.println(e);
@@ -41,25 +62,20 @@ public class ClientHandler {
socketServer.close(); socketServer.close();
} }
public static void createThread(DatagramPacket packet) { public static void createThread(DatagramSocket socketClientThread) {
try { try {
InetAddress clientAddress = packet.getAddress(); byte[] recues = new byte[1024]; // tampon de réception
int clientPort = packet.getPort(); DatagramPacket receivedPacket = new DatagramPacket(
System.out.println( recues,
"Nouveau client : @" + clientAddress + ":" + clientPort recues.length
); );
DatagramSocket socket = new DatagramSocket(); // Reserve new port socketClientThread.receive(receivedPacket);
String message = new String(
String response = "PORT:" + socket.getLocalPort(); receivedPacket.getData(),
byte[] envoyees; // tampon d'émission 0,
envoyees = response.getBytes(); receivedPacket.getLength()
DatagramPacket packetToSend = new DatagramPacket(
envoyees,
envoyees.length,
clientAddress,
clientPort
); );
socket.send(packetToSend); System.out.println("Received message: " + message);
} catch (Exception e) { } catch (Exception e) {
System.err.println(e); System.err.println(e);
} }