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 :

Communication d'objets en reseau : StreamCorruptedException: invalid type code: AC


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 7
    Par défaut Communication d'objets en reseau : StreamCorruptedException: invalid type code: AC
    Bonjour,

    Je pense que c'est la première fois que je pose un problème sur ce forum à propos de Java.

    Je suis actuellement en train de développer un serveur Java qui doit communiquer avec un autre serveur (le serveur fait donc office de client et serveur).

    Le service qui pose problème (exception en rouge)
    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
    /**
         * Permet d'envoyer un message (Objet) vers un autre serveur a travers le tube
         * @param s est une instance de la socket
         * @param m est une instance du message
         * @throws metier.MetierException en cas de probleme lors de l'envoi
         */
        public static void envoyerServeur(Socket s, Message m) throws MetierException
        {
            ObjectOutputStream oos = null;
    
            try {
                oos = FactoryStream.getInstance().getOutput(s);
            } catch(StreamException ex) {
                try {
                    oos = FactoryStream.getInstance().creerOutput(s);
                } catch (StreamException ex1) {
                    m = null;
                    throw new MetierException(ex.getMessage());
                }
            }
    
            // On tente d'envoyer
            try {
                oos = new ObjectOutputStream(s.getOutputStream());
                oos.writeObject(m);
                oos.flush();
            } catch (IOException ex) {
                m = null;
                throw new MetierException("Impossible d'envoyer un objet sur le flux "+ex.getMessage());
            }
        }
    
        /**
         * Permet de recevoir un message (objet)
         * @param s est une instance de la socket
         * @return une instance de message
         * @throws metier.MetierException en cas de probleme de lecture
         */
        public static Message recevoirServeur(Socket s) throws MetierException
        {
            ObjectInputStream ois = null;
            Message message = null;
    
            try {
                System.err.println("R");
                ois = FactoryStream.getInstance().getInput(s);
                System.err.println("R");
            } catch(StreamException ex) {
                try {
                    System.err.println("C");
                    ois = FactoryStream.getInstance().creerInput(s);
                } catch (StreamException ex1) {
                    throw new MetierException(ex.getMessage());
                }
            }
    
            try {
                message = (Message)ois.readObject();
            } catch (StreamCorruptedException ex) {
                System.err.println(ex);
                throw new MetierException("Impossible de recevoir un objet sur le flux "+ex.getMessage());
            } catch (IOException ex) {
                throw new MetierException("Impossible de recevoir un objet sur le flux "+ex.getMessage());
            } catch (ClassCastException ex) {
                throw new MetierException("Impossible de lire l'objet envoye par le serveur distant (L'objet n'est pas un message)");
            } catch (ClassNotFoundException ex) {
                throw new MetierException("Impossible de lire l'objet envoye par le serveur distant (L'objet n'est pas un message)");
            } finally {
    
            }
            return message;
        }
    et une fabrique qui gère mes ObjectInput et ObjectOutput
    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
    public ObjectOutputStream getOutput(Socket s) throws StreamException
        {
            if(oos.containsKey(s))
                return oos.get(s);
            else
                throw new StreamException("Impossible de trouver un oos car il n'existe pas");
        }
     
        public ObjectOutputStream creerOutput(Socket s) throws MetierException, StreamException
        {
            if (oos.containsKey(s)) {
                throw new StreamException("Impossible de creer un nouveau oos car il existe deja");
            }
     
            ObjectOutputStream noos = null;
            try {
                noos = new ObjectOutputStream(s.getOutputStream());
                oos.put(s, noos);
                return noos;
            } catch (IOException ex) {
                throw new MetierException("Impossible de creer un nouveau oos : "+ex.getMessage());
            }
        }
     
        public ObjectInputStream getInput(Socket s) throws StreamException
        {
            if(ois.containsKey(s)) {
                return ois.get(s);
            }
            else
                throw new StreamException("Impossible de trouver un ois car il n'existe pas");
        }
     
        public ObjectInputStream creerInput(Socket s) throws MetierException, StreamException
        {
     
            if (ois.containsKey(s)) {
                throw new StreamException("Impossible de creer un nouveau ois car il existe deja");
            }
     
            ObjectInputStream nois = null;
            try {
                nois = new ObjectInputStream(s.getInputStream());
                ois.put(s, nois);
                return nois;
            } catch (IOException ex) {
                throw new MetierException("Impossible de creer un nouveau ois : "+ex.getMessage());
            }
        }
    Le fichier sérialisé est un objet message qui implémente bien serializable
    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
    /*
     * To change this template, choose Tools | Templates
     * and open the template in the editor.
     */
     
    package metier;
     
    import java.io.Serializable;
    import java.util.ArrayList;
    import java.util.List;
     
    /**
     * Represente un message à envoyer vers un serveur ou un client
     * @author Corentin
     */
    public class Message implements Serializable {
     
        private static final long serialVersionUID = 42L;
     
     
        private int code;                   // Code pour le protocole
        private String message;             // Contenu du message
        private List <Object> arguments;    // Arguments
     
        public Message(int code, String message)
        {
            this.code = code;
            this.message = message;
        }
     
        public int getCode()
        {
            return code;
        }
     
        /**
         * Retourne le nombre d'arguments
         * @return un entier avec le nombre d'argument
         */
        public int size()
        {
            return arguments.size();
        }
     
        public void addArguments(Object argument)
        {
            if(arguments==null)
                arguments = new ArrayList<Object>();
            arguments.add(argument);
        }
     
        public Object getArgument(int numero)
        {
            return arguments.get(numero);
        }
     
    }
    Mon exception est levée au moment de la lecture (désérialization) de l'objet message (en rouge dans le code).

    J'ai essayé pas mal de chose et je m'oriente vers vous.
    Merci

  2. #2
    vic
    vic est déconnecté
    Membre chevronné

    Profil pro
    Inscrit en
    Août 2002
    Messages
    431
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 431
    Par défaut
    Hello,

    le problème est que tu crées un ObjectOutputStream à chaque envoi de message, alors que de l'autre coté tu gardes toujours le même ObjectInputStream. Il faut que soit tu conserves l'ObjectOutputStream, soit tu recrées également l'ObjectInputStream à chaque lecture.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 7
    Par défaut
    Salut,

    Merci pour ta réponse je vais essayer de m'orienter vers cette piste

Discussions similaires

  1. Erreur "java.io.StreamCorruptedException: invalid type code: 00"
    Par bilou_12 dans le forum Débuter avec Java
    Réponses: 4
    Dernier message: 25/03/2012, 15h03
  2. java.io.StreamCorruptedException: invalid type code: 25
    Par yli_ren dans le forum Weblogic
    Réponses: 1
    Dernier message: 13/03/2009, 11h06
  3. [Servlet] java.io.StreamCorruptedException: invalid stream
    Par ced2004 dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 07/01/2006, 14h02
  4. Sélection d'objets pour un logiciel de type AutoCAD
    Par loran4444 dans le forum C++Builder
    Réponses: 15
    Dernier message: 09/03/2005, 19h23
  5. Réponses: 14
    Dernier message: 02/03/2005, 18h15

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