From f0ea538c219e7750c90815f36223d65157969d59 Mon Sep 17 00:00:00 2001 From: Xeon0X Date: Mon, 31 Mar 2025 21:45:32 +0200 Subject: [PATCH] refactor: split server into mutliples methods --- app/src/main/java/clientserver/App.java | 4 +- .../main/java/clientserver/client/Client.java | 16 +++ .../clientserver/server/ClientHandler.java | 97 ------------------- .../main/java/clientserver/server/Server.java | 91 +++++++++++++++++ 4 files changed, 109 insertions(+), 99 deletions(-) delete mode 100644 app/src/main/java/clientserver/server/ClientHandler.java create mode 100644 app/src/main/java/clientserver/server/Server.java diff --git a/app/src/main/java/clientserver/App.java b/app/src/main/java/clientserver/App.java index 90246c9..9f5f31d 100644 --- a/app/src/main/java/clientserver/App.java +++ b/app/src/main/java/clientserver/App.java @@ -1,7 +1,7 @@ package clientserver; import clientserver.client.Client; -import clientserver.server.ClientHandler; +import clientserver.server.Server; public class App { @@ -28,7 +28,7 @@ public class App { case "server": // Run the server System.out.println("Starting server..."); - ClientHandler.main(new String[] {}); + Server.run(); break; default: System.out.println("Unknown mode: " + mode); diff --git a/app/src/main/java/clientserver/client/Client.java b/app/src/main/java/clientserver/client/Client.java index b10c4fa..4449a71 100644 --- a/app/src/main/java/clientserver/client/Client.java +++ b/app/src/main/java/clientserver/client/Client.java @@ -6,6 +6,22 @@ import java.net.InetAddress; public class Client { + InetAddress clientAddress; + int clientPort; + + public InetAddress getClientAddress() { + return clientAddress; + } + + public int getClientPort() { + return clientPort; + } + + public Client(InetAddress address, int port) { + this.clientAddress = address; + this.clientPort = port; + } + public static void main(String[] args) { try { // 1 - Création du canal avec un port libre diff --git a/app/src/main/java/clientserver/server/ClientHandler.java b/app/src/main/java/clientserver/server/ClientHandler.java deleted file mode 100644 index d62389d..0000000 --- a/app/src/main/java/clientserver/server/ClientHandler.java +++ /dev/null @@ -1,97 +0,0 @@ -package clientserver.server; - -import java.net.DatagramPacket; -import java.net.DatagramSocket; -import java.net.InetAddress; -import java.net.InetSocketAddress; - -public class ClientHandler { - - public static void main(String[] args) { - 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 - - // 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 - - 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); - } - } - - socketServer.close(); - } - - public static void createThread(DatagramSocket socketClientThread) { - try { - byte[] recues = new byte[1024]; // tampon de réception - DatagramPacket receivedPacket = new DatagramPacket( - recues, - recues.length - ); - socketClientThread.receive(receivedPacket); - String message = new String( - receivedPacket.getData(), - 0, - receivedPacket.getLength() - ); - System.out.println("Received message: " + message); - } catch (Exception e) { - System.err.println(e); - } - } - - static void scannerUDP(int startPort, int endPort) { - try { - for (int i = startPort; i < endPort; i++) { - try (DatagramSocket socket = new DatagramSocket(i)) {} catch ( - Exception e - ) { - System.out.println("Port n°" + i + " déjà occupé"); - } - } - } catch (Exception e) { - System.out.println(e); - } - } -} diff --git a/app/src/main/java/clientserver/server/Server.java b/app/src/main/java/clientserver/server/Server.java new file mode 100644 index 0000000..92a947c --- /dev/null +++ b/app/src/main/java/clientserver/server/Server.java @@ -0,0 +1,91 @@ +package clientserver.server; + +import clientserver.client.Client; +import java.io.IOException; +import java.net.DatagramPacket; +import java.net.DatagramSocket; + +public class Server { + + private int mainServerPort; + private DatagramSocket mainServerSocket; + + public Server(int port) { + this.mainServerPort = port; + mainServerSocket = createSocket(this.mainServerPort); + } + + public Server() { + this.mainServerPort = 6666; + mainServerSocket = createSocket(this.mainServerPort); + } + + private DatagramSocket createSocket(int port) { + DatagramSocket socket = null; + try { + socket = new DatagramSocket(port); + } catch (Exception e) { + System.err.println("Failed to bind server socket"); + e.printStackTrace(); + } + return socket; + } + + private DatagramPacket read(DatagramSocket socket) { + byte[] receivedData = new byte[1024]; + DatagramPacket receivedPacket = new DatagramPacket( + receivedData, + receivedData.length + ); + + try { + socket.receive(receivedPacket); // Blocking call + } catch (IOException e) { + e.printStackTrace(); + } + return receivedPacket; + } + + private Client getClient(DatagramPacket packet) { + return new Client(packet.getAddress(), packet.getPort()); + } + + // public void test(String[] args) { + // while (mainServerPortListening) { + // try { + // DatagramSocket socket = new DatagramSocket(); // Reserve new port + + // 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 + // ); + // mainServerSocket.send(packetToSend); + // Thread thread = new Thread(() -> createThread(socket)); + // thread.start(); + // } catch (Exception e) { + // System.err.println(e); + // } + // } + + // mainServerSocket.close(); + // } + + public static void run() { + System.out.println("Server started"); + Server server = new Server(); + DatagramPacket packet = server.read(server.mainServerSocket); + Client client = server.getClient(packet); + System.out.println( + "Client: " + + client.getClientAddress() + + ":" + + client.getClientPort() + ); + } +}