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 :

java.io.StreamCorruptedException: invalid type code: 45 à la reception d'une ArrayList


Sujet :

Entrée/Sortie Java

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2018
    Messages : 3
    Points : 1
    Points
    1
    Par défaut java.io.StreamCorruptedException: invalid type code: 45 à la reception d'une ArrayList
    Bonjour, je m'essaye actuellement à la programmation réseau, mais je viens de rencontrer un problème que je n'arrive pas à régler, j'ai pourtant recherché sur internet mais le "type code" n'était jamais le même (en général je tombe sur des gens qui qui ont "Invalid type code: AC", ce qui n'est pas mon cas). J'essaie d''envoyer une ArrayList<String> via un ObjectOutputStream côté serveur et de la recevoir côté client avec un ObjectInputStream. Le problème étant qu'à la réception, le client me renvoie l'exception "java.io.StreamCorruptedException: invalid type code: 45". Je voulais donc connaître les possibles causes de cette exception (en particulier pour le type code 45, je n'ai réellement rien trouvé dessus sur internet ).

    Je vous remercie pour avoir lus mon message, et attends vos réponses

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Je pense que tu écris plusieurs objets à la suite dans le même ObjectOutputStream, et que le "type code", c'est simplement le premier octet du second objet, donc qui est potentiellement différent selon sa sérialisation. Un ObjectOutputStream est fait pour transmettre qu'un seul objet : à sa création, une entête est écrite au début du flux. Si tu écris un objet dans le flux à la suite, cette entête n'est pas écrite, forcément. Et si tu écris encore un objet, c'est pareil. Donc quand tu lis ton flux, au premier objet, pas de soucis, l'entête est là et l'objet est lu, mais au second, pas d'entête et Java soulève une exception en disant "hey y'a 45" (sous-entendu "...alors que je devrais avoir autre chose").
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2018
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Merci pour votre réponse !
    Donc cela voudrait dire qu'il faut que je créé un nouvel ObjectOutputStream à chaque nouvel objet que je veux envoyer ? Dans ce cas là, faut-il créer aussi un nouvel ObjectInputStream de l'autre côté ?

    EDIT: J'ai essayé et maintenant au même moment, j'ai la même exception mais l'erreur n'est plus la même : "invalid stream header: 456E2061", ce qui est ce tu disais (il y a de l'avancement, maintenant j'ai le problème en entier).

    EDIT2 (oui ça fais un peu beaucoup d'edit): Il y a bien une en-tête ! Le problème, c'est qu'elle est reçue en même temps que le texte que le serveur envoie avant (Le client envoie sa demande, le serveur lui demande donc un ID et envoie le texte "En attente de l'ID", le client reçoit donc le texte puis envoie son ID, le problème est que le texte de mon ObjectOutputStream est reçue à la place de l'ArrayList.
    Je me suis rendue compte de ce problème car "456E2061" (ce que le client prend pour l'en-tête veut dire en hexadécimal "En a", le début de mon message. Il doit y avoir un problème de synchronisation dans mon programme.

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 552
    Points : 21 608
    Points
    21 608
    Par défaut
    Euh, non, un ObjectOutputStream est tout-à-fait capable d'écrire plus d'un objet. Si ce n'était pas le cas, la classe ne proposerait pas de le faire. Il serait impossible d'essayer d'écrire plus d'un objet. Les exemples fournis avec ObjectOutputStream rendent cela parfaitement clair.

    Ce qui n'empêche pas qu'il est plus simple de tout mettre dans un seul objet et de n'en envoyer qu'un seul, ça évite de faire un protocole compliqué d'écriture/lecture. Mais bon c'est pas toujours possible, par exemple quand on veut établir une communication vivante.

    Le problème est donc bel et bien ailleurs. Il faudrait juste montrer le code en fait : qu'est-ce qui est envoyé et reçu, par qui, quand, de quelle manière, et tout cela sans omettre le moindre détail. Bref il faut montrer le code entier, pour qu'on puisse le copier/coller chez nous et l'essayer sans toucher à rien.
    En principe tout se passe bien tant qu'on n'ajoute pas soi-même une chose qui ne sert absolument à rien et qui crée le problème. Et pourtant c'est en général ce qui se passe.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2018
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    J'ai finalement trouvé le problème ! Une valeur est envoyée en trop de la part du serveur, ce qui a causé une désynchronisation entre le client et le serveur. Je vous remercie pour votre aide !
    Au revoir ^_^

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. Réponses: 2
    Dernier message: 06/02/2009, 20h25
  4. java.io.StreamCorruptedException: invalid stream header: 3C3F786D
    Par *alexandre* dans le forum Entrée/Sortie
    Réponses: 1
    Dernier message: 20/03/2008, 16h49
  5. [Servlet] java.io.StreamCorruptedException: invalid stream
    Par ced2004 dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 07/01/2006, 14h02

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