diff --git a/.project b/.project new file mode 100644 index 0000000..9f05120 --- /dev/null +++ b/.project @@ -0,0 +1,28 @@ + + + ClientServer + Project ClientServer created by Buildship. + + + + + org.eclipse.buildship.core.gradleprojectbuilder + + + + + + org.eclipse.buildship.core.gradleprojectnature + + + + 1743445961452 + + 30 + + org.eclipse.core.resources.regexFilterMatcher + node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ + + + + diff --git a/.settings/org.eclipse.buildship.core.prefs b/.settings/org.eclipse.buildship.core.prefs new file mode 100644 index 0000000..d230334 --- /dev/null +++ b/.settings/org.eclipse.buildship.core.prefs @@ -0,0 +1,13 @@ +arguments=--init-script /home/xeon0x/.var/app/dev.zed.Zed/data/zed/extensions/work/java/jdtls/jdt-language-server-1.46.0-202503271314/configuration/org.eclipse.osgi/58/0/.cp/gradle/init/init.gradle +auto.sync=false +build.scans.enabled=false +connection.gradle.distribution=GRADLE_DISTRIBUTION(WRAPPER) +connection.project.dir= +eclipse.preferences.version=1 +gradle.user.home= +java.home=/usr/lib64/jvm/java-21-openjdk-21 +jvm.arguments= +offline.mode=false +override.workspace.settings=true +show.console.view=true +show.executions.view=true diff --git a/README.md b/README.md index c940f86..2d82657 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,39 @@ +# ClientServer + +## Build + +```bash +./gradlew build +``` + +## Run + +### Client + +```bash +./gradlew run --args='client' +``` + +or + +```bash +./gradlew runServer +``` + +### Server + +```bash +./gradlew run --args='server' +``` + +or + +```bash +./gradlew runServer +``` + +## Documentation + ```mermaid sequenceDiagram Note over Client, Serveur: DatagramSocket("localhost", 66666) diff --git a/app/.classpath b/app/.classpath new file mode 100644 index 0000000..282ada5 --- /dev/null +++ b/app/.classpath @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/app/.project b/app/.project new file mode 100644 index 0000000..ecb5e8f --- /dev/null +++ b/app/.project @@ -0,0 +1,34 @@ + + + app + Project app created by Buildship. + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.buildship.core.gradleprojectbuilder + + + + + + org.eclipse.jdt.core.javanature + org.eclipse.buildship.core.gradleprojectnature + + + + 1743445961456 + + 30 + + org.eclipse.core.resources.regexFilterMatcher + node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ + + + + diff --git a/app/.settings/org.eclipse.buildship.core.prefs b/app/.settings/org.eclipse.buildship.core.prefs new file mode 100644 index 0000000..b1886ad --- /dev/null +++ b/app/.settings/org.eclipse.buildship.core.prefs @@ -0,0 +1,2 @@ +connection.project.dir=.. +eclipse.preferences.version=1 diff --git a/app/build.gradle b/app/build.gradle index 990d74d..1505e06 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -40,3 +40,19 @@ tasks.named('test') { // Use JUnit Platform for unit tests. useJUnitPlatform() } + +task runServer(type: JavaExec) { + description = 'Runs the server' + group = 'application' + mainClass = application.mainClass + classpath = sourceSets.main.runtimeClasspath + args = ['server'] +} + +task runClient(type: JavaExec) { + description = 'Runs the client' + group = 'application' + mainClass = application.mainClass + classpath = sourceSets.main.runtimeClasspath + args = ['client'] +} diff --git a/app/src/main/java/clientserver/App.java b/app/src/main/java/clientserver/App.java index 94a7196..90246c9 100644 --- a/app/src/main/java/clientserver/App.java +++ b/app/src/main/java/clientserver/App.java @@ -1,5 +1,8 @@ package clientserver; +import clientserver.client.Client; +import clientserver.server.ClientHandler; + public class App { public String getGreeting() { @@ -7,8 +10,28 @@ public class App { } public static void main(String[] args) { - System.out.println(new App().getGreeting()); - ClientHandler.main(new String[] {}); - // MistralDirectAPI.main(new String[] {}); + if (args.length == 0) { + System.out.println( + "Please use --args='client' or --args='server'." + ); + return; + } + + String mode = args[0]; + + switch (mode.toLowerCase()) { + 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..."); + ClientHandler.main(new String[] {}); + break; + default: + System.out.println("Unknown mode: " + mode); + } } } diff --git a/app/src/main/java/clientserver/Client.java b/app/src/main/java/clientserver/client/Client.java similarity index 71% rename from app/src/main/java/clientserver/Client.java rename to app/src/main/java/clientserver/client/Client.java index e209afa..b10c4fa 100644 --- a/app/src/main/java/clientserver/Client.java +++ b/app/src/main/java/clientserver/client/Client.java @@ -1,10 +1,11 @@ -package clientserver; +package clientserver.client; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; public class Client { + public static void main(String[] args) { try { // 1 - Création du canal avec un port libre @@ -16,15 +17,26 @@ public class Client { String message = "Hello Server"; byte[] envoyees = message.getBytes(); DatagramPacket paquetEnvoye = new DatagramPacket( - envoyees, envoyees.length, adresseServeur, portServeur); + envoyees, + envoyees.length, + adresseServeur, + portServeur + ); socketClient.send(paquetEnvoye); System.out.println("Message envoyé au serveur"); // 3 - Recevoir byte[] recues = new byte[1024]; // tampon de réception - DatagramPacket paquetRecu = new DatagramPacket(recues, recues.length); + DatagramPacket paquetRecu = new DatagramPacket( + recues, + recues.length + ); socketClient.receive(paquetRecu); - String reponse = new String(paquetRecu.getData(), 0, paquetRecu.getLength()); + String reponse = new String( + paquetRecu.getData(), + 0, + paquetRecu.getLength() + ); if (reponse.startsWith("PORT:")) { int newPort = Integer.parseInt(reponse.substring(5)); @@ -35,7 +47,11 @@ public class Client { String messagePort = "Message au nouveau port"; byte[] envoyeesPort = messagePort.getBytes(); DatagramPacket paquetPort = new DatagramPacket( - envoyeesPort, envoyeesPort.length, adresseServeur, newPort); + envoyeesPort, + envoyeesPort.length, + adresseServeur, + newPort + ); socketClient.send(paquetPort); } diff --git a/app/src/main/java/clientserver/MistralDirectAPI.java b/app/src/main/java/clientserver/common/MistralDirectAPI.java similarity index 98% rename from app/src/main/java/clientserver/MistralDirectAPI.java rename to app/src/main/java/clientserver/common/MistralDirectAPI.java index 25c1318..65bc0bc 100644 --- a/app/src/main/java/clientserver/MistralDirectAPI.java +++ b/app/src/main/java/clientserver/common/MistralDirectAPI.java @@ -1,4 +1,4 @@ -package clientserver; +package clientserver.common; import java.io.FileInputStream; import java.io.IOException; diff --git a/app/src/main/java/clientserver/ClientHandler.java b/app/src/main/java/clientserver/server/ClientHandler.java similarity index 66% rename from app/src/main/java/clientserver/ClientHandler.java rename to app/src/main/java/clientserver/server/ClientHandler.java index a9aa42d..d62389d 100644 --- a/app/src/main/java/clientserver/ClientHandler.java +++ b/app/src/main/java/clientserver/server/ClientHandler.java @@ -1,4 +1,4 @@ -package clientserver; +package clientserver.server; import java.net.DatagramPacket; import java.net.DatagramSocket; @@ -7,7 +7,7 @@ import java.net.InetSocketAddress; public class ClientHandler { - static void main(String[] args) { + public static void main(String[] args) { int port = 6666; boolean running = true; DatagramSocket socketServer = null; @@ -94,43 +94,4 @@ public class ClientHandler { System.out.println(e); } } - // public static void main(String[] args) { - // try { - // // 1 - Création du canal - // DatagramSocket socketServeur = new DatagramSocket(null); - // // 2 - Réservation du port - // InetSocketAddress adresse = new InetSocketAddress( - // "localhost", - // 6666 - // ); - // socketServeur.bind(adresse); - // byte[] recues = new byte[1024]; // tampon d'émission - // byte[] envoyees; // tampon de réception - // // 3 - Recevoir - // DatagramPacket paquetRecu = new DatagramPacket( - // recues, - // recues.length - // ); - // socketServeur.receive(paquetRecu); - // InetAddress adrClient = paquetRecu.getAddress(); - // int prtClient = paquetRecu.getPort(); - // System.out.println( - // "Nouveau client : @" + adrClient + ":" + prtClient - // ); - // // 4 - Émettre - // String reponse = "Serveur RX302 ready"; - // envoyees = reponse.getBytes(); - // DatagramPacket paquetEnvoye = new DatagramPacket( - // envoyees, - // envoyees.length, - // adrClient, - // prtClient - // ); - // socketServeur.send(paquetEnvoye); - // // 5 - Libérer le canal - // socketServeur.close(); - // } catch (Exception e) { - // System.err.println(e); - // } - // } }