1. #1
    Candidat au Club
    Homme Profil pro
    Intégrateur Web
    Inscrit en
    mai 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : Algérie

    Informations professionnelles :
    Activité : Intégrateur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : mai 2016
    Messages : 6
    Points : 4
    Points
    4

    Par défaut incrémenter une variable ( client serveur)

    Bonsoir a tous,

    je débute dans java et j'ai un soucis j'aimerais incrémenter une variable via un serveur ( j'essaye de réaliser un programme qui a comme principe : une file d'attente chez un médecin ), j'ai fait un code pour incrementer la variable i mais sa marche un peu d'aide SVP serez la bienvenue merci

    voila code pour le serveur :
    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
     
    import java.io.*;
    import java.net.*;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    public class Provider{
         public static int  i = 0;
        ServerSocket providerSocket;
        Socket connection = null;
        ObjectOutputStream out;
        ObjectInputStream in;
        String message;
        Provider(){}
        void run()
        {
            try{
                //1. creating a server socket
                providerSocket = new ServerSocket(2006, 10);
                //2. Wait for connection
                System.out.println("Waiting for connection");
                connection = providerSocket.accept();
                System.out.println("Connection received from " + connection.getInetAddress().getHostName());
                //3. get Input and Output streams
                out = new ObjectOutputStream(connection.getOutputStream());
                out.flush();
                in = new ObjectInputStream(connection.getInputStream());
                sendMessage("Connection successful");
                //4. The two parts communicate via the input and output streams
                do{
                    try{
                        message = (String)in.readObject();
                        System.out.println("client>" + message);
                        if (message.equals("bye"))
                            sendMessage("bye");
                    }
                    catch(ClassNotFoundException classnot){
                        System.err.println("Data received in unknown format");
                    }
                }while(!message.equals("bye"));
            }
            catch(IOException ioException){
                ioException.printStackTrace();
            }
            finally{
                //4: Closing connection
                try{
                    in.close();
                    out.close();
                    providerSocket.close();
                }
                catch(IOException ioException){
                    ioException.printStackTrace();
                }
            }
        }
        void sendMessage(String msg)
        {
            try{
                out.writeObject(msg);
                out.flush();
                System.out.println("server>" + msg);
     
               i++;
            }
            catch(IOException ioException){
                ioException.printStackTrace();
            }
        }
        public static void main(String args[])
        {
            Provider server = new Provider();
            while(true){
                server.run();
            }
        }
    }
    et voila celui du 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
    import java.io.*;
    import java.net.*;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    public class Requester{
        Socket requestSocket;
        ObjectOutputStream out;
        ObjectInputStream in;
        String message;
        Requester(){}
        void run()
        {
            try{
                //1. creating a socket to connect to the server
                requestSocket = new Socket("localhost", 2006);
                System.out.println("Connected to localhost in port 2004");
                //2. get Input and Output streams
                out = new ObjectOutputStream(requestSocket.getOutputStream());
                out.flush();
                in = new ObjectInputStream(requestSocket.getInputStream());
                //3: Communicating with the server
                do{
                    try{
                        message = (String)in.readObject();
                        System.out.println("server>" + message);
                        sendMessage("Hi my server");
                         JFrame f = new JFrame();
                f.setSize(500, 500);
                JLabel m = new JLabel();
                m.setText("Nouveau client"+ Provider.i);
                f.add(m);
                f.setVisible(true);
     
                    }
                    catch(ClassNotFoundException classNot){
                        System.err.println("data received in unknown format");
                    }
                }while(!message.equals("bye"));
            }
            catch(UnknownHostException unknownHost){
                System.err.println("You are trying to connect to an unknown host!");
            }
            catch(IOException ioException){
                ioException.printStackTrace();
            }
            finally{
                //4: Closing connection
                try{
                    in.close();
                    out.close();
                    requestSocket.close();
                }
                catch(IOException ioException){
                    ioException.printStackTrace();
                }
            }
        }
        void sendMessage(String msg)
        {
            try{
                out.writeObject(msg);
                out.flush();
                System.out.println("client>" + msg);
     
     
            }
            catch(IOException ioException){
                ioException.printStackTrace();
            }
        }
        public static void main(String args[])
        {
            Requester client = new Requester();
            client.run();
        }
    }

    merci a vous.

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java/Eclipse RCP
    Inscrit en
    septembre 2009
    Messages
    10 212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java/Eclipse RCP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : septembre 2009
    Messages : 10 212
    Points : 24 486
    Points
    24 486
    Billets dans le blog
    2

    Par défaut

    Salut,

    1. Le principe du client serveur c'est que le client et le serveur sont deux applications différentes. Elles peuvent être exécutées sur la même machine, en général, plus souvent sur des machines différentes, mais dans tous les cas dans des JVM différentes. Donc il n'est pas question de récupérer la valeur d'une variable du serveur par un accès direct comme tu fais dans le code suivant :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      m.setText("Nouveau client"+ Provider.i);
      Si tu veux pouvoir afficher une valeur d'une variable du serveur, elle doit être transmise entre le serveur et le client, par exemple dans le message que le serveur renvoit lorsque le client lui envoit un message.
    2. L'algorithme général de ton serveur c'est :

      1. en boucle infinie
        1. créer un serveur
        2. attendre un connection
        3. envoyer un message au client (Connection succesful)
        4. en boucle
          1. lire le message envoyé par le client et l'afficher
          2. si le message est "bye" envoyer un message en retour et fin de boucle


    Alors déjà, tu crées un serveur à chaque tour de boucle ! Créer un seul serveur au démarrage, et en boucle, sur un ou plusieurs threads, attends une ou plusieurs connexions.
    Avant d'envoyer un message au client, lit le message du client jusqu'au bout et en fonction répond ce qu'il faut. Avec ton code, le souci est que tu lis en boucle sur l'InputStream de la connexion client : la lecture se bloque (donc le programme se bloque) jusqu'à ce qu'il y ait quelque chose à lire (comme le client n'envoie qu'un seul message, qui n'est pas "bye", ça ne risque pas de se débloquer). De la même façon, le client lit ce que le serveur lui envoit en boucle. Il va bien afficher le premier message (le "Connection succesful") mais après il va lire la socket et donc bloquer tant qu'il n'y a rien à lire. Le serveur et le client se bloque donc l'un l'autre. Le serveur attends que le client lui envoie quelque chose et le client attends que le serveur lui envoie quelque chose : ils peuvent tous les deux attendre longtemps.
    Et si tu lances un deuxième client, sa connexion se bloque dès le début en attente que le serveur accepte sa connexion, puisque le serveur est occupé à attendre qu'un autre client lui envoie quelque chose.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Candidat au Club
    Homme Profil pro
    Intégrateur Web
    Inscrit en
    mai 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : Algérie

    Informations professionnelles :
    Activité : Intégrateur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : mai 2016
    Messages : 6
    Points : 4
    Points
    4

    Par défaut

    salut ;

    je vous remercie d'avoir pris le temps de me répondre , je vais essayer de régler le problème

  4. #4
    Candidat au Club
    Homme Profil pro
    Intégrateur Web
    Inscrit en
    mai 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : Algérie

    Informations professionnelles :
    Activité : Intégrateur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : mai 2016
    Messages : 6
    Points : 4
    Points
    4

    Par défaut

    Salut,

    j'y arrive pas ,
    Si tu veux pouvoir afficher une valeur d'une variable du serveur, elle doit être transmise entre le serveur et le client
    mais comment faire un peu d'aide SVP .

  5. #5
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java/Eclipse RCP
    Inscrit en
    septembre 2009
    Messages
    10 212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java/Eclipse RCP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : septembre 2009
    Messages : 10 212
    Points : 24 486
    Points
    24 486
    Billets dans le blog
    2

    Par défaut

    Citation Envoyé par amine_277 Voir le message
    mais comment faire un peu d'aide SVP .
    Il faut faire passer la valeur de la variable par les messages échangés, dans la réponse du serveur au client. Tu dois définir un "mini protocole", soit définir un format de message, définir comment est structuré le message. Par exemple, tu définis que le client envoie toujours une ligne de texte qui constitue le message, et qu'a tout message envoyé par le client, le serveur répond deux lignes de texte, la valeur de la variable, puis un message. Ainsi le client sait qu'il doit lire 2 lignes de texte dans la réponse du serveur : d'abord la valeur de cette variable dans la première ligne, ensuite un message qui constitue la réponse au message envoyé au client. C'est exactement comme ça que fonctionne tous les protocoles d'échange client/serveur. Si tu avais plusieurs informations à faire passer entre les deux, tu pourrais échanger du xml par exemple, ou du json. Si tu devais pourvoir passer du texte ou de l'image, il te faudrait définir une structure pour tes messages pour que le client sache que la réponse du serveur contient du texte ou de l'image (un header par exemple). Ou s'il fallait que le client envoie des messages que le serveur devrait pouvoir interpréter (par exemple, s'il fallait authentifier la connexion, tu enverrais le nom d'utilisateur et un mot de passe). C'est exactement le même système : formater les messages.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  6. #6
    Membre chevronné
    Inscrit en
    mai 2006
    Messages
    1 362
    Détails du profil
    Informations forums :
    Inscription : mai 2006
    Messages : 1 362
    Points : 1 979
    Points
    1 979

    Par défaut

    Note qu'il existe des protocoles comme SOAP qui permettent d'ecrire dans des objets distants comme si c'étaient des objets locaux mais c'est plutot lourd à mettre en place et pas forcement adapté à on besoin. Mais c'est bon à savoir

  7. #7
    Candidat au Club
    Homme Profil pro
    Intégrateur Web
    Inscrit en
    mai 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : Algérie

    Informations professionnelles :
    Activité : Intégrateur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : mai 2016
    Messages : 6
    Points : 4
    Points
    4

    Par défaut

    Bonsoir ,

    je vous remercie de vos réponse .

Discussions similaires

  1. Incrémenter une variable en CR9
    Par nanouille56 dans le forum SAP Crystal Reports
    Réponses: 9
    Dernier message: 13/02/2007, 15h59
  2. Réponses: 5
    Dernier message: 24/09/2005, 20h31
  3. conception et réalisation d'une application client/serveur
    Par masvivi dans le forum Développement
    Réponses: 1
    Dernier message: 24/08/2005, 12h32
  4. Protocole spécifique pour une appli client/serveur
    Par SteelBox dans le forum Développement
    Réponses: 2
    Dernier message: 17/12/2004, 11h20
  5. [débutant][xsl]incrémenter une variable
    Par guitalca dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 01/04/2003, 15h19

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