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 :

Comment passer un ENUM à travers un Socket ?


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 52
    Par défaut Comment passer un ENUM à travers un Socket ?
    Bien l'bonjour à tous,

    Dans Eclipse je teste 2 projets simultanément (1 Client, 1 Serveur).

    Le Client doit envoyer au Serveur une information de type ENUM (Bonjour | Aurevoir) selon le bouton sur lequel je clique.

    Le Client utilise ObjectOutputStream.writeObject(MonENUM.Bonjour) et balance dans Socket.
    Le Serveur utilise ObjectInputStream.readObject() pour lire le Socket.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    W/System.err(343): java.io.StreamCorruptedException
    W/System.err(343): at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1707)
    W/System.err(343): at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1660)
    W/System.err(343): at com.jBidouille.Tablet.OutgoingControl.run(OutgoingControl.java:36)
    W/System.err(343): at java.lang.Thread.run(Thread.java:1096)
    J'ai crée le même objet ENUM dans chaque projet, mais j'ai le sentiment que ce n'est pas ainsi qu'il faut procéder...!!!???

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    package com.jBidouille.Tablet;
     
    public enum ControlType {
      PLAY, STOP, PAUSE,FORWARD, BACKWARD;
    }
    Une petite idée !?

  2. #2
    Modérateur
    Avatar de wax78
    Homme Profil pro
    R&D - Palefrenier programmeur
    Inscrit en
    Août 2006
    Messages
    4 096
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : R&D - Palefrenier programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 096
    Par défaut
    Tu px utiliser ordinal() ou name() de l'énumération pour le passer dans la socket. (donc int ou string).

    Après, Je ne sais pas si un enum peut passer d'une autre manière.
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 52
    Par défaut
    Oui mais du coup, cela perd tout son intérêt de passer un ENUM

  4. #4
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Citation Envoyé par elmaestro Voir le message
    Oui mais du coup, cela perd tout son intérêt de passer un ENUM
    ?? Depuis quand ? Un Enum ce n'est pas un truc pour gérer la communication entre deux machines, c'est pour restreindre les valeurs possibles d'un type de données à l'intérieur du programme (et pas à l'extérieur, donc, ce qui est tout bonnement impossible.)
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre Expert
    Avatar de professeur shadoko
    Homme Profil pro
    retraité nostalgique Java SE
    Inscrit en
    Juillet 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Par défaut
    tu peux parfaitement passer une instance d'enum sur un flot d'objet: si les deux classes sont vues des deux cotés avec la même version il n'y a pas de problème.
    StreamCorrupted exception c'est plutot que tu as des constructions de flots qui sont dysymétriques. Tu es bien sûr que tes sockets de chaque coté ont l'intention de s'envoyer et de lire la même chose? ça n'en a pas l'air.
    (oops :edit, j'avais pas vu que c'était sur l'outputstream ... extrèmement étrange! re-edit: c'est bufferisé ou non?)

    @Thelvin : pour une fois pas d'accord avec toi.

  6. #6
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Citation Envoyé par professeur shadoko Voir le message
    @Thelvin : pour une fois pas d'accord avec toi.
    Parce qu'on ne parle pas de la même chose. Certes, passer des Enums à la sérialisation marche sans problème. Mais l'intérêt des enums n'est absolument pas là. Ils ne servent pas spécialement à grand-chose dans ce contexte, et sont la même chose que juste leur ordinal(), à peu de choses près, dont aucune intéressante.

    Citation Envoyé par professeur shadoko Voir le message
    J'ai crée le même objet ENUM dans chaque projet, mais j'ai le sentiment que ce n'est pas ainsi qu'il faut procéder...!!!???
    Tout à fait. Il ne faut pas "créer le même objet Enum", il faut que les deux projets partagent la même classe Enum.
    Ta classe Enum est créée avec un fichier .java (compilé en .class). Eh bien tes deux projets doivent utiliser le même fichier .java (et donc le même .class), pas le refaire chacun de leur côté. C'est un fichier qui doit être commun aux deux projets.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

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

Discussions similaires

  1. comment passer un paramètre a un serveur de socket
    Par orobin dans le forum Silverlight
    Réponses: 4
    Dernier message: 16/09/2008, 22h06
  2. Comment passer un objet à travers le scope session ?
    Par verbose dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 08/02/2008, 12h12
  3. Routeur, comment passer en travers ?
    Par Archaoniro dans le forum Delphi
    Réponses: 19
    Dernier message: 21/08/2006, 04h00
  4. comment passer de access à MySQL
    Par isa_21 dans le forum Requêtes
    Réponses: 4
    Dernier message: 06/10/2004, 08h51
  5. Comment passer sous Delphi ?
    Par J-P-B dans le forum XMLRAD
    Réponses: 2
    Dernier message: 13/06/2003, 10h09

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