Partage
  • Partager sur Facebook
  • Partager sur Twitter

Erreur invalid stream header avec les socket

    19 décembre 2022 à 15:00:42

    Bonjour,

    Je voudrais envoyer des objets que j'ai créer à travers les socket mais j'arrive pas à les récupérer.

    L'objet que j'essaye d'envoyer est de la classe Guerrier qui implemente Serializable et qui contient uniquement des String et des Int ( Nom, PV, Force etc. )

    Coté client le code pour envoyer l'objet :

                InetAddress ip = InetAddress.getByName("localhost");
                Socket s = new Socket(ip, 5056);
                OutputStream outputStream = s.getOutputStream();
                ObjectOutputStream os = new ObjectOutputStream(outputStream);
                os.writeObject(g1);

    Avec g1 l'objet Guerrier.

    Coté serveur :

    ServerSocket ss = new ServerSocket(5056);
                s = ss.accept();
                os = new ObjectOutputStream(s.getOutputStream());
                ObjectInputStream is = new ObjectInputStream(s.getInputStream());
                Guerrier g1 = (Guerrier) is.readObject();
                System.out.println(g1.getNom());

    Et lorsque le client se connecte et envoie le Guerrier, dans la console du serveur ceci ressort :

    A new client is connected : Socket[addr=/127.0.0.1,port=55077,localport=5056]
    Assigning new thread for this client
    java.io.StreamCorruptedException: invalid stream header: 73720013
    	at java.base/java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:963)
    	at java.base/java.io.ObjectInputStream.<init>(ObjectInputStream.java:397)
    	at Main.ClientHandler.run(Server.java:71)

    Si quelqu'un a une idée je suis preneur, Merci !




    -
    Edité par socoolmen 19 décembre 2022 à 20:24:08

    • Partager sur Facebook
    • Partager sur Twitter
      31 décembre 2022 à 14:31:46

      Il semble que vous rencontriez une exception "StreamCorruptedException: invalid stream header" lorsque vous essayez de lire un objet Guerrier envoyé à travers les sockets. Cette exception peut être levée lorsque le flux de données reçu n'est pas valide ou corrompu.

      Voici quelques suggestions pour résoudre ce problème :

      1. Assurez-vous que toutes les classes implémentant Serializable ont une version UID unique. Cela peut être fait en ajoutant un identifiant de version UID statique et final à chaque classe qui implémente Serializable. Par exemple :
        public class Guerrier implements Serializable { private static final long serialVersionUID = 1L; // ... } 
      2. Assurez-vous que vous utilisez les mêmes versions de la classe Guerrier côté client et côté serveur. Si vous avez modifié la classe Guerrier côté client mais pas côté serveur, ou vice versa, cela peut causer des problèmes de désérialisation.

      3. Vérifiez que les flux d'objets ObjectOutputStream et ObjectInputStream sont correctement initialisés et fermés. Assurez-vous que vous créez un nouvel ObjectOutputStream pour chaque objet que vous envoyez, et que vous fermez chaque flux d'objets lorsque vous avez terminé de l'utiliser. De même, assurez-vous que vous créez un nouvel ObjectInputStream pour chaque objet que vous recevez et que vous fermez chaque flux d'objets lorsque vous avez terminé de l'utiliser.

      4. Vérifiez que vous avez bien configuré les sockets côté client et côté serveur. Assurez-vous que les sockets sont correctement créés et configurés, et que le port utilisé pour les sockets côté client et côté serveur est le même.

      5. Vérifiez que vous ne rencontrez pas d'autres exceptions ou erreurs lors de l'exécution de votre code. Si vous voyez d'autres messages d'erreur ou exceptions, ils pourraient indiquer la cause du problème de désérialisation.

      -
      Edité par AdrianaPetrovski 31 décembre 2022 à 14:32:11

      • Partager sur Facebook
      • Partager sur Twitter

      Erreur invalid stream header avec les socket

      × 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