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

Java Discussion :

Réception d'un type date lors de l'envoi d'un objet


Sujet :

Java

  1. #1
    Membre régulier
    Étudiant
    Inscrit en
    Janvier 2010
    Messages
    73
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2010
    Messages : 73
    Points : 77
    Points
    77
    Par défaut Réception d'un type date lors de l'envoi d'un objet
    Bonjour, je suis entrain de developpez une application client serveur, ou j'ai developpé moi même la partie serveur et client, lors de la connexion j'envoi un objet de type message(classe propre à mon application et est présente dans la partie client et serveur), mais lors de la réception dans le serveur l'objet reçu n'est pas du même type ex: je reçois parfois le type date.
    j'utilise netbeans platform 7.0 et l'api socket, la classe message a été ajouté à un projet que j'ai combiné à la platforme.
    Merci

  2. #2
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    on peux voir les codes?

  3. #3
    Membre régulier
    Étudiant
    Inscrit en
    Janvier 2010
    Messages
    73
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2010
    Messages : 73
    Points : 77
    Points
    77
    Par défaut
    C'est le listener de la classe socket serveur qui attend les envois des clients
    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
     
    public class Listener extends Thread
        {
            int i =0;
            public Listener() 
            {
        	}
            public void run () 
            {
                while (true) 
                {
                    try 
                    {
     
                        Object rcv = in.readObject();
                        if(rcv != null)
                        {
     
                            System.out.println("rcv = "+ rcv.getClass());
     
                            /*
                             * Ici quand j'essai de recuperer lobjet j'affiche son type ce qui me ressort un util.date
                              */
     
     
                            System.out.println("rcv"+ rcv.getClass());
                            if(((Message)rcv).getType() == 1)
                            {
                                List<Object> v = (List<Object>)(((Message)rcv).getMessage());
                                for(Object o : v)
                                {
                                    if(!visites.contains(o))
                                    {
                                        visites.add(o);
                                        Message m = (Message)Lookup.getDefault().lookup(bertrans.network.message.api.Message.class);
                                        m.setType(2);
                                        m.setMessage(o);
                                        dispatche(m);
                                    }
                                }
                            }
                            else if(((Message)rcv).getType() == 2)
                            {
                                Object m = ((Message)rcv).getMessage();
                                if(!visites.contains(m))
                                {
                                    visites.add(m);
                                }
                                dispatche(m);
                            }
     
                        }
                        else
                        {
                            //System.out.println("null");
                        }
                    }
                    catch (IOException ex)
                    {
     
                    }
                    catch (ClassNotFoundException ex)
                    {
     
                    }
                }
        	}
        }
    Puis il y'a la classe MessageImpl qui implemente l'interface Message ou il y'a les declaration des méthodes
    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
     
    /*
     * To change this template, choose Tools | Templates
     * and open the template in the editor.
     */
    package bertrans.network.message;
     
    import java.io.Serializable;
    import bertrans.network.message.api.Message;
    import org.openide.util.lookup.ServiceProvider;
     
    /**
     *
     * @author ridick
     */
    @ServiceProvider(service=Message.class)
    public class MessageImpl  implements Message, Serializable
    {
        private int type;
        private Object message;
        private int sender;
     
        @Override
        public int getSender() 
        {
            return sender;
        }
     
        @Override
        public void setSender(int sender) 
        {
            this.sender = sender;
        }
     
        @Override
        public Object getMessage() 
        {
            return message;
        }
     
        @Override
        public void setMessage(Object message) 
        {
            this.message = message;
        }
     
        @Override
        public int getType() 
        {
            return type;
        }
     
        @Override
        public void setType(int type) 
        {
            this.type = type;
        }
     
        public MessageImpl() 
        {
        }
     
    }
    Puis le thread de la socket client qui essai de se connecter et quand il se connecte il envoi un objet message

    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
     
    public class Connecter extends Thread
        {
     
            public Connecter() 
            {
            }
     
            public void run()
            {
                connected = false;
     
                System.out.println("en attente du serveur");
                while(!connected)
                {
                    System.out.println("##"+connected);
                    try 
                    {
                        //String ahost-addr = 
                        socket = new Socket(host, port);
                        out = new ObjectOutputStream(socket.getOutputStream());
                        in = new ObjectInputStream(socket.getInputStream());
                        /*
                         * Ici je construis mon objet message afin de l'envoyer
                         */
                        Message m = Lookup.getDefault().lookup(bertrans.network.message.api.Message.class);
                        m.setMessage("AZAZA");
                        m.setType(1);
                        m.setSender(1);
                        connected = true;
                        sendData(out);
     
                        System.out.println("connecté au serveur");
     
                    } 
                    catch (UnknownHostException ex)
                    {
                        System.out.println(ex);
                    }
                    catch (IOException ex)
                    {
                        System.out.println(ex);
                    }
                }
            }
     
        }
    et la methode senddata qui envoi un objet en utilisant l'objectoutputstream out
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    @Override
        public void sendData(Object data) 
        {
            try
            {
                out.writeObject(data);
            }
            catch (IOException ex)
            {
                System.out.println(ex);
            }
        }
    Merci pour l'aide

  4. #4
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
                        socket = new Socket(host, port);
                        out = new ObjectOutputStream(socket.getOutputStream());
                        in = new ObjectInputStream(socket.getInputStream());
                        /*
                         * Ici je construis mon objet message afin de l'envoyer
                         */
                        Message m = Lookup.getDefault().lookup(bertrans.network.message.api.Message.class);
                        m.setMessage("AZAZA");
                        m.setType(1);
                        m.setSender(1);
                        connected = true;
                        sendData(out);
    ça ne devrais pas plutot être sendData(m)? parce que sinon vous écrivez l'objet "ObjectOutputStream" dans le stream de sortie :/

    Enfin, ca n'explique pas pourquoi vous avez un java.util.Date!
    Vos catch sont vide? Si oui, affichez au moins l'exception. Le serveur a bien aussi accès à la classe MessageImpl?

  5. #5
    Membre régulier
    Étudiant
    Inscrit en
    Janvier 2010
    Messages
    73
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2010
    Messages : 73
    Points : 77
    Points
    77
    Par défaut
    Oui oui c'est un sendData(m) plutot, et pour les catch qui sont vides, ils sont plutot responsable des exceptions relatives à l'objectinputstream et la connexion qui ne posent pas probleme, le probleme c'est lors de la tentative du cast qui me dit que l'objet reçu (rcv) ne peut pas être caster en Message car il est de type java.util.date

  6. #6
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    ce serait bien qu'on aie le détail de toutes les exceptions qui précèdent ce cas.

    Il n'y a pas d'avance, si vous décodez un Date, c'est que vous avez mis un Date à un moment donné.

  7. #7
    Membre régulier
    Étudiant
    Inscrit en
    Janvier 2010
    Messages
    73
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2010
    Messages : 73
    Points : 77
    Points
    77
    Par défaut
    Merci pour ton effort bon j'ai resolu le problem en supprimant l'interface et en creant un jar à partir de mon module Message et en l'incluant dans la partie client et la partie serveur, après j'ai changé l'appel au contructeur de Message en new Message(); au lieu d'utiliser le lookup

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

Discussions similaires

  1. Problème données de type date lors de l'insertion
    Par NarbOni dans le forum Administration
    Réponses: 1
    Dernier message: 12/04/2011, 10h28
  2. Soucis lors de l'envoi d'un objet en utilisant les Sockets
    Par LaCartouche dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 21/10/2010, 11h03
  3. [MySQL] Envoi de la date lors de l'envoi d'un formulaire
    Par rickgoz dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 11/12/2008, 17h52
  4. Conversion de date lors d'un import
    Par bilbon.S dans le forum SQL Procédural
    Réponses: 4
    Dernier message: 26/03/2004, 14h33
  5. utilisation du type DATE d'interbase
    Par dibak dans le forum InterBase
    Réponses: 4
    Dernier message: 05/01/2004, 15h03

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