Socket - Client Serveur

Socket - Client Serveur - Java - Programmation

Marsh Posté le 29-10-2009 à 15:18:57    

Bonjour à tous,
 
Je dois réaliser un projet dans le cadre d'un cours d'architecture des SI mais je suis complétement largué alors j'espere que votre communauté pourra m'aider :cry:
 
Je vous copie l'ennoncé pour que vous puissiez comprendre mon travail :

Développez en java et en utilisant les sockets, une application client-serveur telle qu'un utilisateur, en utilisant la partie cliente, saisit la réservation d'un billet de train (dates, horaires, classe, destination, aller-retour etc.) Cette réservation est transmise à la partie serveur pour vérification de places suffisantes (on fait l'hypothèse que la destination et autres informations sont correctes et correspondent à des trains existants). S'il reste de la place dans le train, la réservation est confirmée, sinon, l'utilisateur est averti de la non satisfaction de la requête. Vous définirez le nombre de places disponibles pour chaque train.
 
On utilisera l'API java.net pour l'utilisation des sockets.
 
Que faut il regarder ?
-Le nombre de clients connectés en meme temps.
-Verrouillage/Deverouillage (type de gestion des accés concurrents)
-2 pases COMIT (validation à deux phases)
-..

 
 
Nous avons vu en cours les architectures des SI et les relations client-serveur! Mais nous n'avons fait aucun cours de java relatif aux sockets ni quoi que ce soit...
 
J'ai donc commencé en faisant des recherches sur la voile en cherchant un système client serveur en java et j'ai donc trouvé ceci:
 
Classe ClientSocketTrain
 

Code :
  1. import java.io.IOException;
  2. import java.io.ObjectInputStream;
  3. import java.io.ObjectOutputStream;
  4. import java.lang.ClassNotFoundException;
  5. import java.net.InetAddress;
  6. import java.net.Socket;
  7. import java.net.UnknownHostException;
  8. public class ClientSocketTrain {
  9.     public static void main(String[] args) {
  10.         try {
  11.             //
  12.             // Creer une connection avec le socket serveur sur l'application du serveur
  13.             //
  14.             InetAddress host = InetAddress.getLocalHost();
  15.             Socket socket = new Socket(host.getHostName(), 7777);
  16.             //
  17.             // Envoie un message à l'application serveur (client à l'origine)
  18.             //
  19.             ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
  20.             oos.writeObject("test" );
  21.             //
  22.             // Lit et affiche la réponse du message envoyé par l'application serveur
  23.             //
  24.             ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
  25.             String message = (String) ois.readObject();
  26.             System.out.println("Message: " + message);
  27.             ois.close();
  28.             oos.close();
  29.         } catch (UnknownHostException e) {
  30.             e.printStackTrace();
  31.         } catch (IOException e) {
  32.             e.printStackTrace();
  33.         } catch (ClassNotFoundException e) {
  34.             e.printStackTrace();
  35.         }
  36.     }
  37. }


 
Classe ConnectionHandler:
 

Code :
  1. import java.io.IOException;
  2. import java.io.ObjectInputStream;
  3. import java.io.ObjectOutputStream;
  4. import java.lang.ClassNotFoundException;
  5. import java.net.Socket;
  6. class ConnectionHandler implements Runnable {
  7.     private Socket socket;
  8.     public ConnectionHandler(Socket socket) {
  9.         this.socket = socket;
  10.         Thread t = new Thread(this);
  11.         t.start();
  12.     }
  13.     public void run() {
  14.         try
  15.         {
  16.             //
  17.             // Lit le message envoyé par l'application client
  18.          //
  19.             ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
  20.             String message = (String) ois.readObject();
  21.          
  22.             System.out.println("Message Recu: " + message);
  23.            
  24.             //  
  25.             // Envoie une réponse à l'application cliente
  26.             //
  27.             ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
  28.             oos.writeObject("Bonjour..." );
  29.             ois.close();
  30.             oos.close();
  31.             socket.close();
  32.             System.out.println("En attente d'un message du client..." );
  33.         } catch (IOException e) {
  34.             e.printStackTrace();
  35.         } catch (ClassNotFoundException e) {
  36.             e.printStackTrace();
  37.         }
  38.     }
  39. }


 
Classe ServerSocketTrain:
 

Code :
  1. import java.io.IOException;
  2. import java.net.Socket;
  3. import java.net.ServerSocket;
  4. public class ServerSocketTrain {
  5.     private ServerSocket server;
  6.     private int port = 7777;
  7.     public ServerSocketTrain() {
  8.         try {
  9.             server = new ServerSocket(port);
  10.         } catch (IOException e) {
  11.             e.printStackTrace();
  12.         }
  13.     }
  14.     public static void main(String[] args) {
  15.         ServerSocketTrain example = new ServerSocketTrain();
  16.         example.handleConnection();
  17.     }
  18.     public void handleConnection() {
  19.         System.out.println("En attente du message du client..." );
  20.         //
  21.         // Ici le serveur fait une boucle pour accepter toutes les connections engagées par
  22.         // l'application cliente.
  23.         //
  24.         while (true) {
  25.             try {
  26.                 Socket socket = server.accept();
  27.                 new ConnectionHandler(socket);
  28.             } catch (IOException e) {
  29.                 e.printStackTrace();
  30.             }
  31.         }
  32.     }
  33. }


 
Tout fonctionne pour le moment! En meme temps j'ai juste récupérer du code! Mais maintenant je ne sais vraiment pas par ou commencer... j'ai vraiment besoin de votre aide alors j'espere que vous allez rapidement me répondre pour que je puisse travailler dessus ! De plus notre professeur ne nous a donné que 5 jours de délai. Jusqu'à lundi prochain..
 
Merci d'avance


Message édité par toregua le 29-10-2009 à 15:20:06
Reply

Marsh Posté le 29-10-2009 à 15:18:57   

Reply

Marsh Posté le 29-10-2009 à 20:22:18    

Tu demandes qu'on te ponde tout le code?
 
Ca représente quand même quelques heures de travail!
 
Tout ce que je peux te dire c'est que si tu as plusieurs clients connectés en même temps sur le serveur, tu vas devoir créer différents Threads dans celui-ci. Pour limiter le nombre de clients connectés simultanément, tu peux utiliser la classe Semaphore.
 
Tu devras créer un bloc de code synchronisé dans lequel tu fais ton commit en deux phases: d'abord vérifier s'il y a des places dispo, ensuite si c'est le cas effectuer la réservation. Si tu ne synchronises pas cette partie correctement, tu vas avoir une "race condition".
 
Voilà, bonne chance :)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed