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 :

probleme client serveur


Sujet :

Entrée/Sortie Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Septembre 2006
    Messages
    140
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 140
    Par défaut probleme client serveur
    Bonjour ,

    Excusez-moi encore une fois.Je fais une application client-serveur d'un jeu.Le problème est que le serveur ne reçoit rien alors que le client envoie le message.Quand je fais un br.ready() du côté du serveur , il renvoie tout le temps false et ça cale au niveau de mon br.readLine() .Je ne comprends pas pourquoi.Pourtant , du côté du client , je fais bien un pw.println() , puis , un pw.flush() .Quand je fais un pw.checkerror() du côté du client , quand je me loggue , ça retourne false , mais après , à chaque fois , ça retourne true.
    Je sais que ce que je dis est un peu flou mais je n'ai pas arrêté de chercher sans trouver.Par contre , je vous ai mis une archive avec mon code.

    Côté 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
    public ClientThread(ClientGUILogin log ,String nomJoueur , int port , String adresseServeur)throws Exception{
            s = new Socket(adresseServeur,port);
            br = new BufferedReader(new InputStreamReader( s.getInputStream() ) );
            pw = new PrintWriter(s.getOutputStream());
            nomJ = nomJoueur ;
            clientGUIlogin = log ; 
        }
     
        public void run(){
            try{
                traiterLogin();
                traiterPartie();
            }
            catch(Exception e){}
            finally{libererFlux();}
        }
     
        private void traiterLogin()throws Exception{
            String ligneServeur , nomAdv ;
            char couleurJeton ;
            int numFinChamp; //utilisé pour trouver le '$' dans la réponse de login
     
            //envoi de la demande de login
            envoiMessage(""+Protocole.CMD_LOGIN+nomJ+Protocole.FIN_CHAMP+Protocole.END_OF_LINE);
     
            ligneServeur = br.readLine();
     
            if(ligneServeur.charAt(0)==Protocole.CMD_LOGIN_PROTOCOL_ERROR){
                JOptionPane.showMessageDialog(clientGUIlogin,"Veuillez introduire votre nom !!!");
                throw new Exception("Erreur de protocole");
            }
            else{//<CMD_LOGIN_OK><nomPartenaire$><couleurJetons><END_OF_LINE>
                numFinChamp = ligneServeur.lastIndexOf(Protocole.FIN_CHAMP);
                nomAdv = ligneServeur.substring(1,numFinChamp);
                couleurJeton = ligneServeur.charAt(numFinChamp+1);            
     
                creationPartie(couleurJeton,nomJ,nomAdv);
                clientGUIlogin.setVisible(false);
     
                if( nomAdv.isEmpty() )
                    msg = "Vous n'avez pas encore de partenaire";                     
                else
                    msg = "Vous avez un nouveau partenaire : "+nomAdv+"\n  ==>C'est Ã* votre adversaire de jouer";
     
                maPartieGUI.rafraichirZoneDialogue(msg);            
            }
        }
     
        public void effectueDelogging(){
            msg = ""+Protocole.CMD_LOGOUT+nomJ+Protocole.END_OF_LINE;
            envoiMessage(msg);
            estPartieFinie = true ;
            clientGUIlogin.dispose();
     
            try{br.close();}
            catch(Exception e){
                System.err.println("erreur de fermeture du flux de lecture");
            }
        }
     
        public void envoiMessage(String msg){
            pw.println(msg);
            pw.flush();
        }
     
    public void mouseReleased(MouseEvent e) {          
                pointX = e.getX();
                pointY = e.getY();   
                largeurJLabel = labelsGrilleJeu[0][0].getWidth();
                hauteurJLabel = labelsGrilleJeu[0][0].getHeight();
                colonne = ( (337+pointX)/largeurJLabel )-1 ; 
                ligne = (150+pointY)/(hauteurJLabel+1) ;
                System.out.println("point X "+pointX);
                System.out.println("point Y "+pointY);
     
                if( pointX<-337 || pointX>-31){
                    msgInfoVersEcran("Zone non autorisée",JOptionPane.WARNING_MESSAGE);
                    rafraichirZoneDialogue("Zone non autorisée");
                }
                else
                threadClient.envoiMessage(""+Protocole.CMD_COMMANDE+couleurJeton+colonne+"$"+Protocole.END_OF_LINE);
            }
    Côté 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
        public ThreadJoueur(Socket s, int numThread)throws Exception{
            String protocole,nomJ;
            sock = s ;
            this.br = new BufferedReader(new InputStreamReader(s.getInputStream()));
            this.pw = new PrintWriter(s.getOutputStream()) ; 
            numJoueur = numThread ; 
     
            protocole = br.readLine();
            nomJ = protocole.substring(1,protocole.lastIndexOf(Protocole.FIN_CHAMP));
     
            nomJ1 = nomJ;
     
            traiterLogin(numThread);
        }
     
        public void run(){
            String read ="";
     
            while(!estPartieFinie){
                try{
                    if(br.ready()){
                        System.out.println("avant le readline"+read);
                        read = br.readLine() ;
                        System.out.println("après le readline"+read);
     
                        switch(read.charAt(0)){
                            case Protocole.CMD_LOGOUT : 
                                traiterLogout(); break;
                            case Protocole.CMD_COMMANDE :
                                traiterCommande(read); break;
                        }
                    }
                    sleep(200);
                }
                catch(Exception e){}
                finally{
                    //libererFlux();
                }
            }
        }
     
        public void traiterLogin(int tailleThread){
     
            if(nomJ1.isEmpty()){
                envoiMessage(""+Protocole.CMD_LOGIN_PROTOCOL_ERROR);
                libererFlux();
                isOK = false ; 
                return ; 
            }
            else{
                if( (tailleThread % 2) == 0 ){
                    envoiMessage(""+Protocole.CMD_LOGIN_OK+""+Protocole.FIN_CHAMP+Protocole.ROUGE+Protocole.END_OF_LINE);
                    ServerEcoute.ajoutJeu(nomJ1,null);
                }
                else{
                    String adv = ServerEcoute.getNomJoueur(tailleThread-1);
                    String msg = ""+Protocole.CMD_LOGIN+adv+Protocole.FIN_CHAMP+Protocole.JAUNE+Protocole.END_OF_LINE;
                    envoiMessage(msg);
     
                    //Il faut prévenir l'adversaire qu'il a désormais un joueur
                    msg =""+Protocole.CMD_PARTENAIRE+nomJ1+Protocole.FIN_CHAMP+Protocole.END_OF_LINE ;
                    ServerEcoute.envoiMessage(tailleThread-1, msg);
                    ServerEcoute.ajoutJeu(null, nomJ1);
                }
                ServerEcoute.ajoutUtilisateur(nomJ1);
            }
        }
    Merci.
    Fichiers attachés Fichiers attachés

  2. #2
    Membre averti
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2007
    Messages
    11
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 11
    Par défaut Sniffer
    As tu regardé si quelque chose est envoyé sur le réseau avec un sniffer ?
    Cela pourrait déjà t'indiquer si le problème est du coté de l'envoi ou de la réception.

    Julien

Discussions similaires

  1. petit probleme client/serveur
    Par fred033 dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 19/05/2008, 14h11
  2. [Reseaux] Probleme client/serveur
    Par franc82 dans le forum C++
    Réponses: 3
    Dernier message: 24/04/2007, 22h14
  3. probleme client serveur en c
    Par oclone dans le forum C
    Réponses: 2
    Dernier message: 09/12/2006, 21h59
  4. [Reseau] probleme client/serveur TCP LInux
    Par jmjmjm dans le forum Réseau
    Réponses: 20
    Dernier message: 03/12/2006, 19h32
  5. Probleme Client / Serveur
    Par Kinian dans le forum Access
    Réponses: 4
    Dernier message: 16/06/2006, 10h12

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