From 59ea8422b055f1f0ebb0d67b6d5a9390f7fc9e64 Mon Sep 17 00:00:00 2001 From: Xeon0X Date: Mon, 31 Mar 2025 22:40:36 +0200 Subject: [PATCH] refactor: server --- app/build.gradle | 4 +- app/src/main/java/clientserver/App.java | 42 +++++++++---- .../main/java/clientserver/client/Client.java | 12 ++-- .../main/java/clientserver/server/Server.java | 61 ++++++++++--------- 4 files changed, 72 insertions(+), 47 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 1505e06..fc08b4d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -46,7 +46,7 @@ task runServer(type: JavaExec) { group = 'application' mainClass = application.mainClass classpath = sourceSets.main.runtimeClasspath - args = ['server'] + args = ['--server'] } task runClient(type: JavaExec) { @@ -54,5 +54,5 @@ task runClient(type: JavaExec) { group = 'application' mainClass = application.mainClass classpath = sourceSets.main.runtimeClasspath - args = ['client'] + args = ['--client'] } diff --git a/app/src/main/java/clientserver/App.java b/app/src/main/java/clientserver/App.java index 9f5f31d..bc0006c 100644 --- a/app/src/main/java/clientserver/App.java +++ b/app/src/main/java/clientserver/App.java @@ -10,28 +10,48 @@ public class App { } public static void main(String[] args) { - if (args.length == 0) { - System.out.println( - "Please use --args='client' or --args='server'." - ); + String mode = null; + + // Parse arguments + for (String arg : args) { + switch (arg.toLowerCase()) { + case "--client": + mode = "client"; + break; + case "--server": + mode = "server"; + break; + default: + System.out.println("Unknown argument: " + arg); + printUsage(); + return; + } + } + + // Check if mode is specified + if (mode == null) { + System.out.println("No mode specified."); + printUsage(); return; } - String mode = args[0]; - - switch (mode.toLowerCase()) { + // Execute based on mode + switch (mode) { case "client": - // Run the client System.out.println("Starting client..."); Client.main(new String[] {}); break; case "server": - // Run the server System.out.println("Starting server..."); Server.run(); break; - default: - System.out.println("Unknown mode: " + mode); } } + + private static void printUsage() { + System.out.println("Usage: ./gradlew run --args='option'"); + System.out.println("Options:"); + System.out.println(" --client Run in client mode"); + System.out.println(" --server Run in server mode"); + } } diff --git a/app/src/main/java/clientserver/client/Client.java b/app/src/main/java/clientserver/client/Client.java index 4449a71..9a046df 100644 --- a/app/src/main/java/clientserver/client/Client.java +++ b/app/src/main/java/clientserver/client/Client.java @@ -9,12 +9,16 @@ public class Client { InetAddress clientAddress; int clientPort; - public InetAddress getClientAddress() { - return clientAddress; + public void setPort(int port) { + this.clientPort = port; } - public int getClientPort() { - return clientPort; + public int getPort() { + return this.clientPort; + } + + public InetAddress getAddress() { + return this.clientAddress; } public Client(InetAddress address, int port) { diff --git a/app/src/main/java/clientserver/server/Server.java b/app/src/main/java/clientserver/server/Server.java index 92a947c..5d0e8c9 100644 --- a/app/src/main/java/clientserver/server/Server.java +++ b/app/src/main/java/clientserver/server/Server.java @@ -31,6 +31,17 @@ public class Server { return socket; } + private DatagramSocket getNewSocket() { + DatagramSocket socket = null; + try { + socket = new DatagramSocket(); // Reserve a random 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( @@ -50,42 +61,32 @@ public class Server { return new Client(packet.getAddress(), packet.getPort()); } - // public void test(String[] args) { - // while (mainServerPortListening) { - // try { - // DatagramSocket socket = new DatagramSocket(); // Reserve new port + private void attributeNewPort(Client client) { + DatagramSocket newSocket = getNewSocket(); + int port = newSocket.getLocalPort(); + String response = "PORT:" + port; + client.setPort(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(); - // } + byte[] sendData; + sendData = response.getBytes(); + DatagramPacket packetToSend = new DatagramPacket( + sendData, + sendData.length, + client.getAddress(), + port + ); + try { + this.mainServerSocket.send(packetToSend); + } catch (IOException e) { + e.printStackTrace(); + } + } 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() - ); + server.attributeNewPort(client); } }