Skip to content
Snippets Groups Projects
Commit cbd66fbc authored by Sarah CHERCHEM's avatar Sarah CHERCHEM
Browse files

test du serveur avec plusieurs clients

parent e1e7eb4a
No related branches found
No related tags found
No related merge requests found
......@@ -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();
}
......
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();
}
}
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();
}
}
package src;
public class server {
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment