Algorithmique des systèmes et applications réparties TP3: socket, swing et serveur multi-thread Exercice 1 : l’objectif de cet exercice est de compter le nombre de clients qui se connectent sur un serveur. Le modèle de communication utilisé est les sockets TCP et le traitement coté serveur est réalisé à l’aide d’un thread. Soit les deux codes suivants (Serveur.java et Client.java) : import java.io.IOException; import java.net.*; public class Serveur { public static void main(String[] args){ ServerSocket socket; try { socket = new ServerSocket(2013); Thread t = new Thread(new Accepter_clients(socket)); t.start(); System.out.println("Mes clients sont prets "); } catch (IOException e) {} } } class Accepter_clients implements Runnable { private ServerSocket socketserver; private Socket socket; private int nbrclient = 1; public Accepter_clients(ServerSocket s){ socketserver = s; } public void run() { try { while(true){ socket = socketserver.accept(); // attente d'un client import java.io.IOException; import java.net.*; public class Client { public static void main(String[] args){ Socket socket; try { socket = new Socket("localhost",2013); socket.close(); } catch (IOException e) {} } } Questions : - Lancez le serveur et lancez le client plusieurs fois. - Modifiez le code précédent afin de limiter le nombre de clients qui peuvent se connecter à 5. System.out.println("Le client numero "+nbrclient+ " est connecte"); nbrclient++; socket.close(); } } catch (IOException e) {} } } Exercice 2 : l’objectif de cet exercice est de réaliser une application de tchatche, pour cela nous allons utiliser la bibliothèque swing et les sockets tcp. L’application est réalisée avec une seule classe qui représente à la fois le client est le serveur. Au lancement de l’application la fenêtre JFrame suivante est apparue (combinaison de JLabel, JTextField, JPanel, JTextArea, JRadioButton, ...) : Pour tchatcher il faut lancer deux instances de cette application, une instance pour la première personne qui doit choisir le bouton Serveur et une instance pour la deuxième personne qui doit choisir le bouton Client. A l’intérieur de l’application, on peut trouver un code qui ressemble au suivant : if (Serveur) { hostServer = new ServerSocket(port); socket = hostServer.accept(); // attente client } else { // si Client socket = new Socket(“localhost”, port); } Avant la connexion du client (2ème personne, on a la vue suivante) : Après la connexion du client, les deux personnes peuvent échanger leurs messages :