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);
- // }
- // }
}