Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème Serveur-Client

Sujet résolu
    18 février 2009 à 10:05:08

    Bonjour,

    J'ai fait une petite application serveur-client pour tester le principe.
    Malheureusement, ça ne fonctionne pas comme je l'avais prévu, les String que j'envoie ne s'affiche pas.

    Pour aider, j'ai fais des balises avec des
    System.out("TEST");
    
    pour savoir à quelle instruction mes classes bloquent.

    Quand je lance le serveur, bloquage à TEST2 >> Normal attente de connexion du client.
    Après je lance le client, bloquage à TESTB sur le client / bloquage à TEST3 pour le serveur.

    Donc serveur et client bloquent tous les deux aux instructions:

    in = new ObjectInputStream(socket1.getInputStream());
    out = new ObjectOutputStream(socket1.getOutputStream());
    


    Je vous joins ci dessous mes 2 classes serveur et client...
    (Ne pas tenir compte des instructions en commentaires)


    SERVEUR

    /*
     * To change this template, choose Tools | Templates
     * and open the template in the editor.
     */
    
    package drawpokerserveur;
    
    import java.io.*;
    import java.net.*;
    import java.util.Scanner;
        
    /**
     *
     * @author Johann
     */
    
    /* !!!!! VOICI LE SERVEUR !!!!! */
    
    
    public class Execution {
        
        public static void main(String[] args){
            
            //int flag = 1; /* Flag de la boucle Rejouer */
            //Scanner scan1 = new Scanner (System.in);
            //int tableauCartesAChanger[] = new int[5];
            ServerSocket svc = null;
            Socket socket1 = null;
            ObjectInputStream in = null;
            ObjectOutputStream out = null;
            String textsend = "salut, je suis le serveur";
            String texterecu = null;
            
            
            //while (flag == 1){
                
                  //Sabot s1 = new Sabot();
                  
                  try {
                      
                     System.out.println ("TEST");
                     svc = new ServerSocket(8225);
                     System.out.println ("TEST2");
                     socket1 = svc.accept();
                     System.out.println ("TEST3");
                     in = new ObjectInputStream(socket1.getInputStream());
                     out = new ObjectOutputStream(socket1.getOutputStream());
                     
                     System.out.println ("TEST4");
                     texterecu = (String) in.readObject();
                     System.out.println(texterecu);
                     System.out.println ("TEST5");
                     out.writeObject(textsend);
                     out.flush();
                     System.out.println ("TEST6");
                     socket1.close();
                     System.out.println ("TEST7");
                
                
                
                
                  }
                  catch (Exception e1){ 
                     e1.printStackTrace();   
                  }
                 
                  //System.out.println("Rejouer ? \n 1. OUI \n 2. NON");
                  //flag = scan1.nextInt();
                  
            
          //} /* FIN WHILE */ 
            
        } /* FIN MAIN */
    
    } /* FIN CLASSE EXECUTION */
    


    Client

    /*
     * To change this template, choose Tools | Templates
     * and open the template in the editor.
     */
    
    package drawpokerclient;
    
    import java.net.*;
    import java.io.*;
    import java.util.Scanner;
    
    /**
     *
     * @author Johann
     */
    
    /* !!!!! VOICI LE CLIENT !!!!! */
    
    
    
    public class Execution {
        
        public static void main(String[] args){
            
            int tableauCarte[] = new int[5]; /* Création du tableau indiquant les cartes à changer */
            for (int i = 0; i < 5; i++){
                
                tableauCarte[i] = -1;
                
            }
            //Scanner scan1 = new Scanner(System.in);
            //int nbCarteAChanger;
            //int numCarteAModifier;
            Socket socket1 = null;
            ObjectInputStream in = null;
            ObjectOutputStream out = null;
            String texterecu = null;        
            String textesend = "salut je suis le client";    
            
            try {
                
                System.out.println ("TESTA");
                socket1 = new Socket("127.0.0.1", 8225); /* Création de la socket Client */
                System.out.println ("TESTB");
                in = new ObjectInputStream(socket1.getInputStream()); /* FLUX D'ENTREE */
                out = new ObjectOutputStream(socket1.getOutputStream()); /* FLUX DE SORTIE */
                
                out.writeObject(textesend);
                texterecu = (String) in.readObject();
                System.out.println(texterecu);
                System.out.println ("TESTC");
                socket1.close();
                System.out.println ("TESTD");
                     
                 }
                 
                
                
              
            catch (Exception e1){
                e1.printStackTrace();    
            }
            
            
          
            
        } /* FIN MAIN */
      
    } /* FIN CLASSE EXECUTION */
    



    Ou se situe le problème ?
    Merci à tout ceux qui pourront m'aider.
    • Partager sur Facebook
    • Partager sur Twitter
      18 février 2009 à 10:21:03

      J'ai regardé vite fait mais quand tu fais :
      socket1.getInputStream()
      ton socket attend pas de recevoir des données ? Et comme les 2 attendent ... blocage !
      • Partager sur Facebook
      • Partager sur Twitter
        18 février 2009 à 10:54:46

        Bon j'ai trouvé la source de mon erreur...

        En fait dans le CLIENT, je dois mettre l'instruction
        out = new ObjectOutputStream(socket1.getOutputStream());
        

        AVANT l'instruction
        in = new ObjectInputStream(socket1.getInputStream());
        



        J'ai juste interverti les 2 instructions et ça fonctionne..

        Ma question c'est pourquoi..? Pour moi l'ordre ce ces instructions n'a pas d'influence mais apparemment SI justement..
        Y'as un truc qui m'échappe et j'aimerais vraiment savoir quoi.
        • Partager sur Facebook
        • Partager sur Twitter
          18 février 2009 à 11:18:44

          normalement ça n'a pas d'importance =/ une fois le socket créé ...
          tu devrais pouvoir le faire dans les deux sens =/

          mais je vois pas d'erreur en regardant la connection =/
          tu fais bien un serveur socket qui accepte =/

          donc c'est bizarre que ça n'aille point marché =/
          • Partager sur Facebook
          • Partager sur Twitter

          Problème Serveur-Client

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown