IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Entrée/Sortie Java Discussion :

Communication Serveur- Multi Client via socket


Sujet :

Entrée/Sortie Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Inscrit en
    Mars 2011
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 2
    Par défaut Communication Serveur- Multi Client via socket
    Bonjour à tous, je suis nouveau sur le forum.
    Je me suis inscrit ici, car j'ai un soucis, que je n'arrive pas à résoudre seul (en cherchant sur le net).

    Je dois réaliser une application en java composé de deux parties principalement. Un côté serveur, un côté client (multi clients même) ainsi qu'une partie base de données (développement X Tiers oblige).

    J'ai donc un soucis entre la communication du serveur et mes clients, qui communiquent via un Socket.

    Donc ce que je souhaite pouvoir faire, c'est que le Serveur soit en attente de clients (fonctionnel dans mon code), une fois qu'un client se connecte, le client va demander un ordre au serveur, donc mon cas je demande de me récupérer une liste d'agences. Donc une fois la demande effectuée, le serveur doit me retourner une liste d'agence sous forme d'un Objet ArrayList<Agences>.
    Et aussi plusieurs autres possibilités, comme modifier une agence, etc ...

    Au début je ne faisais que dès que le client se connecte au serveur, que ce dernier me renvoi une liste d'agences. Tout cela fonctionne très bien, sauf que maintenant je coince sur la gestion de mes demandes, c'est à dire, je demande quelque chose au serveur, le serveur me retourne ce que j'ai demandé (résultat d'un traitement, mise à jour d'un élément en base de données, etc ...). Mais malheureusement je n'y arrive point.

    Je me retourne donc vers vous, car tous les exemples que j'ai pu trouver, n'expliquent pas clairement comment gérer une multitude de demandes clientes vers un serveur.

    D'avance merci pour votre aide. Je vous met à disposition les codes que j'emploie et qui ne sont pas fonctionnels pour ce que je veux en faire.
    Seule code que je n'ai pas mis, c'est celui de la la classe Agences qui importe peu ici.


    Côté serveur ==============================================================

    Classe Server :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    package console;
    import java.net.ServerSocket;
    import java.net.Socket;
    /**
    *
    * @author jesuisperdu
    */
    public class Server extends Thread {
     
       private ServerSocket SolarServer;
     
     
       public static void main(String argv[]) throws Exception {
         new Server();
       }
     
       public Server() throws Exception {
    	 int port = 20000;
         SolarServer = new ServerSocket(port);
         System.out.println("Serveur en ecoute sur le port " + port + ".");
         this.start();
       } 
     
       public void run() {
         while(true) {
           try {
            System.out.println("En attente de connexions.");
            Socket client = SolarServer.accept();
            System.out.println("Connexion acceptee de : "+ client.getInetAddress());
            Connect c = new Connect(client);
           } catch(Exception e) {}
         }
       }
    }
    Classe Connect :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    package console;
    import java.io.ObjectInputStream;
    import java.io.ObjectOutputStream;
    import java.net.Socket;
    import java.util.ArrayList;
     
    import provider.DataProvider;
     
    import entity.Agences;
    /**
    *
    * @author jesuisperdu
    */
    class Connect extends Thread {
       private Socket client = null;
       private ObjectInputStream ois = null;
       private ObjectOutputStream oos = null;
     
       public Connect() {
     
       }
     
       public Connect(Socket clientSocket) {
         client = clientSocket;
         try {
          ois = new ObjectInputStream(client.getInputStream());
          oos = new ObjectOutputStream(client.getOutputStream());
         } catch(Exception e1) {
             try {
                client.close();
             }catch(Exception e) {
               System.out.println(e.getMessage());
             }
             return;
         }
         this.start();
       }
     
       public enum commande {
    	    GET_ALL_AGENCES,
    	    UPDATE_AGENCE
    	}
     
     
       public void run() {
          try {
        	  commande commande = null;
        	  commande = (commande) ois.readObject();
        	  System.out.println(commande);
        	  switch (commande){
              	case GET_ALL_AGENCES:
              		ArrayList<Agences> pAgencesList = DataProvider.getInstance().getAllAgences();
                    oos.writeObject(pAgencesList);
                    oos.flush();
              		break;
              	case UPDATE_AGENCE:
              		Agences pAgence = (Agences) ois.readObject();
              		DataProvider.getInstance().updateAgence(pAgence);
              		break;
        	  }
             // close streams and connections
             ois.close();
             oos.close();
             client.close();
          } catch(Exception e) {}       
       }
    }
    Côté client ==============================================================

    Classe Client :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    package console;
     
    import java.io.ObjectInputStream;
    import java.io.ObjectOutputStream;
    import java.net.Socket;
    import java.util.ArrayList;
    import java.util.Scanner;
     
    import entity.Agences;
    /**
    *
    * @author jesuisperdu
    */
    public class Client {
     
       private static String serverIP = "";
     
       public enum commande {
    	    GET_ALL_AGENCES,
    	    UPDATE_AGENCE
    	}
     
       public static void main(String argv[]) {
    	   commande commande = null;
    	   // On vérifie que l'on a passé des paramètres pour l'appel au .jar
    	   if (argv.length == 1) {
    		   // On stocke ces paramètre dans la variable path
    		   serverIP = argv[0];
    	   }
    		// On vérifie si la variable path contient quelque chose
    		if (serverIP == "") {
    			System.out.println("Manque un argument IP derriere l'executable");
    		}
          ObjectOutputStream oos = null;
          ObjectInputStream ois = null;
          Socket socket = null;
          ArrayList<Agences> agences = null;
          try {
            // open a socket connection
            socket = new Socket(serverIP, 20000);
            // open I/O streams for objects
            oos = new ObjectOutputStream(socket.getOutputStream());
            ois = new ObjectInputStream(socket.getInputStream());
            // read an object from the server
            oos.writeObject(commande.GET_ALL_AGENCES);
            oos.flush();
     
            agences = (ArrayList<Agences>) ois.readObject();
     
            System.out.println("Liste des agences :");
     
            for (Agences a : agences) {
    	    	System.out.println(a.getIdagences() + "\t" + a.getNom() + "\t" + a.getRue() + "\t" + a.getCp() + "\t" + a.getVille() + "\t" + a.getTel() + "\t" + a.getFax() + "\t" + a.getMail() + "\t" + a.getDossierFtp());
    	    }
     
            System.out.println("Modification Agence");
            Scanner sc = new Scanner(System.in);
            System.out.println("id Agence a modifier : ");
            int idAg = sc.nextInt();
            System.out.println("Nouveau nom : ");
            String nomAg = sc.nextLine();
            System.out.println("Nouvelle rue : ");
            String rueAg = sc.nextLine();
            System.out.println("Nouveau code postal : ");
            String cpAg = sc.nextLine();
            System.out.println("Nouvelle ville : ");
            String villeAg = sc.nextLine();
            System.out.println("Nouveau Tel : ");
            String telAg = sc.nextLine();
            System.out.println("Nouveau Fax : ");
            String faxAg = sc.nextLine();
            System.out.println("Nouveau Mail : ");
            String mailAg = sc.nextLine();
            System.out.println("Nouveau dossier ftp : ");
            String ftpAg = sc.nextLine();
     
            Agences Ag = new Agences(idAg, nomAg, ftpAg, rueAg, cpAg, villeAg, telAg, faxAg, mailAg);
     
            oos.writeObject(commande.UPDATE_AGENCE);
            oos.flush();
     
            oos.writeObject(Ag);
            oos.flush();
     
            oos.writeObject(commande.GET_ALL_AGENCES);
            oos.flush();
     
            agences = (ArrayList<Agences>) ois.readObject();
     
            System.out.println("Liste des agences :");
     
            for (Agences a : agences) {
    	    	System.out.println(a.getIdagences() + "\t" + a.getNom() + "\t" + a.getRue() + "\t" + a.getCp() + "\t" + a.getVille() + "\t" + a.getTel() + "\t" + a.getFax() + "\t" + a.getMail() + "\t" + a.getDossierFtp());
    	    }
     
            oos.close();
            ois.close();
          } catch(Exception e) {
            System.out.println(e.getMessage());
          }
       }
    }

  2. #2
    Membre confirmé
    Inscrit en
    Juillet 2009
    Messages
    96
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 96
    Par défaut
    D'après ce que j'ai vu, tu n'appelles jamais Connect.start().

    Pas dans le contructeur de Server ni dans le constructeur de Connect.

  3. #3
    Nouveau candidat au Club
    Inscrit en
    Mars 2011
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 2
    Par défaut
    Bonjour et merci d'avoir lu mon sujet.

    Donc pour l'appel au start il est fait directement dans le constructeur de la classe via la ligne this.start(); .

    Si il y a d'autres remarques/ explications, je suis toujours à votre écoute .

Discussions similaires

  1. Problème Socket Java architecture Serveur multi Client
    Par abdelhak_z dans le forum Entrée/Sortie
    Réponses: 6
    Dernier message: 23/03/2015, 13h42
  2. Réponses: 18
    Dernier message: 28/03/2014, 11h28
  3. Liste chainée, sockets, serveur multi clients.
    Par jbarreau-mainson dans le forum Réseau
    Réponses: 4
    Dernier message: 01/05/2009, 12h15
  4. Probleme Serveur/Multi-client avec socket
    Par CouaC dans le forum Réseau
    Réponses: 9
    Dernier message: 18/06/2007, 00h49
  5. [sockets][UDP][C/C++] serveur multi-clients
    Par l@rry dans le forum Développement
    Réponses: 4
    Dernier message: 08/06/2006, 14h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo