Exercice client serveur calculatrice

[Fermé]
Signaler
-
Messages postés
16356
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
25 octobre 2021
-
Bonjour a tous j'ai créé une calculatrice client serveur avec deux opérandes mais je n'arrive pas à connecter les deux machines.Quand le client envoie une le calcul à faire au serveur il le reçoit mais ne renvoie pas le résultat du calcul. Que dois-je faire pour que le serveur puisse renvoyer le résultat du calcul émis par le serveur? Merci de me faire parvenir toute aide elle sera la bienvenue.
Merci encore une fois

Cote client



package calcul;


// programme Java pour illustrer la programmation côté client
// pour une calculatrice simple utilisant TCP
import java.io.DataInputStream; 
import java.io.DataOutputStream; 
import java.io.IOException; 
import java.net.InetAddress; 
import java.net.Socket; 
import java.net.UnknownHostException; 
import java.util.Scanner; 
  
public class calculclient 
{ 
    public static void main(String[] args) throws IOException 
    { 
        InetAddress ip = InetAddress.getLocalHost(); 
        int port = 4444; 
        Scanner sc = new Scanner(System.in); 
  
        // Étape 1: Ouvrir la connexion de socket.
        Socket s = new Socket(ip, port); 
  
        
        // Étape 2: Communication: obtenir les flux d'entrée et de sortie
        DataInputStream dis = new DataInputStream(s.getInputStream()); 
        DataOutputStream dos = new DataOutputStream(s.getOutputStream()); 
  
        while (true) 
        { 
             // Entrez l'équation sous la forme
            // "opérande1 opération opérande2"
            System.out.print("Entrez l'équation sous la forme: "); 
            System.out.println("opérande operation opérande''"); 
  
            String inp = sc.nextLine(); 
  
            if (inp.equals("bye")) 
                break; 
  
            // envoyer l'équation à résoudre
            dos.writeUTF(inp); 
  
            //  attendre que la demande soit traitée et renvoyée au client
            String ans = dis.readUTF(); 
            System.out.println("Answer=" + ans); 
        } 
    } 
} 




Coté serveur



package calcul;


//Programme Java pour illustrer la programmation côté serveur
// pour une calculatrice simple utilisant TCP

import java.io.DataInputStream; 
import java.io.DataOutputStream; 
import java.io.IOException; 
import java.net.ServerSocket; 
import java.net.Socket; 
import java.util.StringTokenizer; 
  
public class calculserver 
{ 
    public static void main(String args[]) throws IOException 
    { 
  
        // Étape 1: Établissez la connexion de socket.
        ServerSocket ss = new ServerSocket(4444); 
        Socket s = ss.accept(); 
  
         // Étape 2: Traitement de la demande.
        DataInputStream dis = new DataInputStream(s.getInputStream()); 
        DataOutputStream dos = new DataOutputStream(s.getOutputStream()); 
  
        while (true) 
        { 
            // wait for input 
            String input = dis.readUTF(); 
  
            if(input.equals("bye")) 
                break; 
  
            System.out.println("Équation reçu:-" + input); 
            int result; 
  
            
             // Utiliser StringTokenizer pour diviser l'équation en opérande et
            // opération
            StringTokenizer st = new StringTokenizer(input); 
  
            int oprnd1 = Integer.parseInt(st.nextToken()); 
            String operation = st.nextToken(); 
            int oprnd2 = Integer.parseInt(st.nextToken()); 
  
            
            // effectuer l'opération requise.
            switch (operation) {
                case "+":
                    result = oprnd1 + oprnd2;
                    break;
                case "-":
                    result = oprnd1 - oprnd2;
                    break;
                case "*":
                    result = oprnd1 * oprnd2;
                    break;
                default:
                    result = oprnd1 / oprnd2;
                    break;
            } 
            System.out.println("Sending the result..."); 
  
            // renvoyer le résultat au client.
            dos.writeUTF(Integer.toString(result)); 
        } 
    } 
} 

2 réponses

Messages postés
16356
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
25 octobre 2021
752
Bonjour


Dans ton client, il faut faire une boucle d’écoute, comme dans ton serveur.
Il faudrait peut-être que le serveur réponde sur un autre port.
C'est à dire que je dois changer le numéro de port ? Pour le client comment dois je créer la boucle d'écoute ?
Si tu as des tutoriels liens captures merci de bien me faire parvenir.
Messages postés
16356
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
25 octobre 2021
752
Pour le client comment dois je créer la boucle d'écoute ?

Exactement comme dans ton serveur.

Si tu as des tutoriels liens captures merci de bien me faire parvenir.

https://www.qwant.com/?q=tuto+java+client+serveur

C'est à dire que je dois changer le numéro de port ?

Je ne suis pas un expert en Java, mais j'ai un peu d'expérience de client serveur, en local host, en C#.

Si le client parle au serveur en local host sur le port 1234. Le server s'abonne en écoute sur ce port.
Selon comment Java et l'OS gèrent ça, le port peut-être "réservé" au serveur.
Si c'est le cas, quand le serveur répond sur le même port, il n'y a que lui qui reçoit sa réponse, en gros il parle tout seul.

J'ai déjà eu ce problème en C# sur windows, peut-être qu'en Java ou sous Unix ça se passe autrement, j'en sais rien.
Dans le doute, je t'ai dit que peut-être utiliser un autre port pour la réponse du serveur serait une bonne option.

Si tu étais sur 2 machines, la question ne se poserait pas
1.1.1.1 parle à 1.1.1.2 sur le port 1234.
1.1.1.2 répond à 1.1.1.1 sur le port 1234.
C'est le même port mais sur 2 IP différentes, pas de risque de conflit.