From cbd66fbc025755805f218e6835d406d139316e08 Mon Sep 17 00:00:00 2001 From: Sarah CHERCHEM <ls_cherchem@esi.dz> Date: Thu, 27 Feb 2025 17:10:30 +0100 Subject: [PATCH] test du serveur avec plusieurs clients --- src/Client.java | 4 +- src/Client2.java | 93 ++++++++++++++++++++++++++++++++++++++ src/Server.java | 113 +++++++++++++++++++++++++++++++++++++++++++++++ src/server.java | 4 -- 4 files changed, 208 insertions(+), 6 deletions(-) create mode 100644 src/Client2.java create mode 100644 src/Server.java delete mode 100644 src/server.java diff --git a/src/Client.java b/src/Client.java index 13d93e9..9ec020c 100644 --- a/src/Client.java +++ b/src/Client.java @@ -15,6 +15,7 @@ public class Client { public Client() { scanner = new Scanner(System.in); } + public void connect() { try { socket = new Socket(SERVER_ADDRESS, PORT); @@ -44,7 +45,7 @@ public class Client { System.out.println("Réponse du serveur : " + response); - if (response.equals("4 0")) { + if (response.contains("Félicitations")) { System.out.println("Félicitations ! Vous avez trouvé la bonne combinaison !"); break; } @@ -86,7 +87,6 @@ public class Client { } } - public static void main(String[] args) { new Client().connect(); } diff --git a/src/Client2.java b/src/Client2.java new file mode 100644 index 0000000..2b4a3e5 --- /dev/null +++ b/src/Client2.java @@ -0,0 +1,93 @@ +package src; + +import java.io.*; +import java.net.*; +import java.util.Scanner; + +public class Client2 { + private static final String SERVER_ADDRESS = "localhost"; + private static final int PORT = 1234; + private Socket socket; + private BufferedReader in; + private PrintWriter out; + private Scanner scanner; + + public Client2() { + scanner = new Scanner(System.in); + } + + public void connect() { + try { + socket = new Socket(SERVER_ADDRESS, PORT); + in = new BufferedReader(new InputStreamReader(socket.getInputStream())); + out = new PrintWriter(socket.getOutputStream(), true); + System.out.println("Connecté au serveur Mastermind !"); + play(); + } catch (IOException e) { + System.err.println("Erreur de connexion au serveur : " + e.getMessage()); + } finally { + closeConnection(); + } + } + + private void play() { + while (true) { + String guess = getUserInput(); + if (guess == null) continue; + + sendGuess(guess); + String response = receiveResponse(); + + if (response == null) { + System.out.println("Connexion fermée par le serveur."); + break; + } + + System.out.println("Réponse du serveur : " + response); + + if (response.contains("Félicitations")) { + System.out.println("Félicitations ! Vous avez trouvé la bonne combinaison !"); + break; + } + } + } + + private String getUserInput() { + System.out.print("Entrez une combinaison (4 lettres parmi B,G,O,R,W,Y) : "); + String input = scanner.nextLine().toUpperCase(); + + if (!input.matches("[BGORWY]{4}")) { + System.out.println("Combinaison invalide, veuillez entrer exactement 4 lettres parmi B, G, O, R, W, Y."); + return null; + } + return input; + } + + private void sendGuess(String guess) { + out.println(guess); + } + + private String receiveResponse() { + try { + return in.readLine(); + } catch (IOException e) { + System.err.println("Erreur de lecture du serveur : " + e.getMessage()); + return null; + } + } + + private void closeConnection() { + try { + if (socket != null) socket.close(); + if (in != null) in.close(); + if (out != null) out.close(); + scanner.close(); + } catch (IOException e) { + System.err.println("Erreur lors de la fermeture des ressources : " + e.getMessage()); + } + } + + public static void main(String[] args) { + new Client2().connect(); + } +} diff --git a/src/Server.java b/src/Server.java new file mode 100644 index 0000000..09a1508 --- /dev/null +++ b/src/Server.java @@ -0,0 +1,113 @@ +package src; + +import java.io.*; +import java.net.*; +import java.util.Random; + +public class Server { + private static final int PORT = 1234; + private static final int CODE_LENGTH = 4; + private Code secretCode; + + public Server() { + this.secretCode = generateSecretCode(); + System.out.println("Code secret généré : " + secretCode); + } + + private Code generateSecretCode() { + Random random = new Random(); + return new Code(random); // Génère un code secret aléatoire + } + + public void start() { + try (ServerSocket serverSocket = new ServerSocket(PORT)) { + System.out.println("Serveur en attente de connexions sur le port " + PORT + "..."); + + // Serveur qui accepte plusieurs clients simultanément + while (true) { + try { + // Accepte un client et lui attribue un thread pour gérer la communication + Socket clientSocket = serverSocket.accept(); + System.out.println("Client connecté !"); + new Thread(new ClientHandler(clientSocket)).start(); + } catch (IOException e) { + System.err.println("Erreur lors de l'acceptation d'un client : " + e.getMessage()); + } + } + } catch (IOException e) { + System.err.println("Erreur lors du démarrage du serveur : " + e.getMessage()); + } + } + + // Classe pour gérer un client dans un thread séparé + private class ClientHandler implements Runnable { + private Socket clientSocket; + private BufferedReader in; + private PrintWriter out; + + public ClientHandler(Socket socket) { + this.clientSocket = socket; + try { + this.in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); + this.out = new PrintWriter(clientSocket.getOutputStream(), true); + } catch (IOException e) { + System.err.println("Erreur lors de la création des flux d'entrée/sortie : " + e.getMessage()); + } + } + + @Override + public void run() { + try { + String input; + int attempts = 0; + + // Interaction avec le client + while ((input = in.readLine()) != null) { + attempts++; + System.out.println("Tentative " + attempts + " du client : " + input); + + // Vérifier si la combinaison est valide + if (input.length() != CODE_LENGTH || !input.matches("[BGORWY]{4}")) { + out.println("Erreur : Entrée invalide. Essayez encore."); + continue; + } + + // Créer une instance de Code à partir de l'entrée du client + Code guess = new Code(input); + int correctPosition = secretCode.numberOfColorsWithCorrectPosition(guess); + int incorrectPosition = secretCode.numberOfColorsWithIncorrectPosition(guess); + + // Envoyer le résultat au client + out.println(correctPosition + " " + incorrectPosition); + + // Vérifier si le client a trouvé la bonne combinaison + if (correctPosition == CODE_LENGTH) { + System.out.println("Le client a trouvé la combinaison " + secretCode + " en " + attempts + " essais."); + out.println("Félicitations ! Vous avez trouvé la bonne combinaison !"); + break; + } + } + } catch (IOException e) { + System.err.println("Erreur de communication avec le client : " + e.getMessage()); + } finally { + closeConnection(); + } + } + + // Fermeture propre des ressources + private void closeConnection() { + try { + if (clientSocket != null) clientSocket.close(); + if (in != null) in.close(); + if (out != null) out.close(); + } catch (IOException e) { + System.err.println("Erreur lors de la fermeture de la connexion : " + e.getMessage()); + } + } + } + + public static void main(String[] args) { + Server server = new Server(); + server.start(); + } +} diff --git a/src/server.java b/src/server.java deleted file mode 100644 index 8f410c6..0000000 --- a/src/server.java +++ /dev/null @@ -1,4 +0,0 @@ -package src; - -public class server { -} -- GitLab