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

Langage Java Discussion :

[Socket et serialization] Plantage lors d'un readObject


Sujet :

Langage Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 39
    Points : 28
    Points
    28
    Par défaut [Socket et serialization] Plantage lors d'un readObject
    Bonjour,

    Presque tout est dans le titre.

    On m'a demandé, dans le cadre d'un projet scolaire, de réaliser une application, capable dans un premier temps d'identifier un utilisateur qui entre login et mot de passe sur le client, et, le serveur, qui lui, identifie ou non selon la liste d'utilisateur qu'il contient ( dans un fichier ).

    Ces utilisateurs sont en faite des objets utilisateurs, contenu dans un objet liste utilisateur grâce a la sérialisation. Jusque la tout va bien.

    La première étape est donc d'envoyer les logins et mot de passe par un socket au serveur, et cela fonctionne.

    Ensuite, je renvoie 1 booléen au client pour lui confirmer son authentification ou non.

    Le problème se fait à la reception par le client, la console Java me lance une érreur à la figure, et, en dépit d'une volonté en béton armé ( peut être pas si armé du coup ), je n'ai pas réussis à trouver la cause.

    L'erreur est la suivante : java.net.SocketException: Connection reset
    Et elle se produit sur l'appel de la/les méthode(s) de mon objet "inObj".
    ( Les méthodes puisque j'en ai essayer une paire, regardez le code vous comprendrez merci ).

    Voici le code source, merci d'avance !

    Main 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
     
               boolean identifier;
               try {
                            s = new Socket ( "localhost" , 6669 );
                          outObj = new ObjectOutputStream ( s.getOutputStream () );
                            inObj = new ObjectInputStream ( s.getInputStream () );
                            } catch ( Exception e ) {
                                System.out.println(e);
                        }
     
    // Reception du booléen d'authentification ...                    
     
                        try {
    // ICI SE SITUE L'ERREUR !!!
    // Alors attention, ici j'ai du TOUT essayer !
    // c'est a dire, identifier = (boolean) inObj.readBoolean();
    // c'est a dire, identifier = inObj.readBoolean();
    // c'est a dire, identifier = inObj.readObject();
    // et enfin ...
                            identifier = (boolean) inObj.readObject();
                            } catch ( Exception e ) {
                                System.out.println ( e );
                        }
    Code source du 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
     
     
            ServerSocket ecoute = null ; 
            Socket s = null ;
            ObjectOutputStream outer = null ; 
            ObjectInputStream in = null ;
     
            try {
                ecoute = new ServerSocket (6669) ; s = ecoute.accept () ;
                outer = new ObjectOutputStream ( s.getOutputStream () ) ;
                in = new ObjectInputStream ( s.getInputStream () ) ;
                texteIn = ( String ) in.readObject () ;
                lg = texteIn;
                System.out.println ( lg ) ;
                texteIn = ( String ) in.readObject () ;
                mdp = texteIn;
                System.out.println ( mdp ) ;
                } catch ( Exception e ) {
                    System.out.println ( " Erreur ! ! ! " );
            }
     
            try {
    // La je vérifiais que j'envoyais bien un booléen :? et c'est le cas 
                if ( identifier )
                System.out.println("c un boolz");
                outer.writeBoolean ( identifier ) ;
                /*out.writeObject ( session ) ;
                out.writeObject ( utilisateur_identifié ) ;*/
                } catch ( Exception e ) {
                    System.out.println ( " Erreur !!! " );
            }

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    548
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 548
    Points : 635
    Points
    635
    Par défaut
    Je crois que tu as oublié d'envoyer le login/mot de passe au serveur...

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 39
    Points : 28
    Points
    28
    Par défaut
    Euh non j'ai bien envoyé le login et mot de passe, c'est d'ailleur dans le premier try de mon main.

    EDIT : Mince quel abrutis ^^ (jparle evidemment de moi ).
    En faite vous pouvez pas le voir parce que je n'ai pas mis tout le code source mais juste la ou l'erreur se pose.
    De toute facon l'envoie des login/mdp au serveur même s'il avait été oublié, n'aurait pas expliqué le fait que le readBoolean déconne dans le main du client puisque le serveur aurait de toute façon envoyé un booléen au client.

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 39
    Points : 28
    Points
    28
    Par défaut
    Hmmm je pense me rapprocher de plus en plus de la solution, apparemment ( et je viens de le découvrir ), il y a 2 type de booléens en java

    Le type Boolean et le type boolean !

    Je cherche des explications ça pourrait trés bien venir de là la source de mon problème, surtout que ( et j'ai oublié de le préciser ), l'erreur ne se produit QUE lorsque je passe des booleens !

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 282
    Points : 327
    Points
    327
    Par défaut
    Boolean est un objet, boolean un type primitif, c'est la même chose pour tous les types primitifs en Java qui existent aussi sous forme d'objets (int/Integer, boolean/Boolean, double/Double ...)

    Maintenant que tu sais ça, penses que tu utilises un ObjectOutputStream, et tout devrait fonctionner

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 39
    Points : 28
    Points
    28
    Par défaut
    Absolument,

    Ca fonctionne parfaitement merci beaucoup !

    Résolu donc.

    A+.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 26/07/2006, 10h52
  2. Réponses: 6
    Dernier message: 13/04/2006, 15h54
  3. Réponses: 22
    Dernier message: 28/03/2006, 14h59
  4. plantage lors de mon free
    Par salseropom dans le forum C
    Réponses: 16
    Dernier message: 17/02/2006, 18h43
  5. plantage lors de réception de fihier
    Par marsupile dans le forum C++Builder
    Réponses: 9
    Dernier message: 22/01/2004, 18h08

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