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

Format d'échange (XML, JSON...) Java Discussion :

XML et socket UDP


Sujet :

Format d'échange (XML, JSON...) Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2013
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2013
    Messages : 26
    Par défaut XML et socket UDP
    Bonjour,

    Dans le cadre d'une appli client/serveur je dois envoyer des messages au format XML via protocole UDP mais je bloque ... Voici mon code actuel afin que vous m'aidiez à trouver l'erreur, apparemment le message est bien envoyé par le client mais la reconstitution avec SAXBuilder coté Serveur me rapporte des tonnes d'erreurs... :

    Cote Client :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    DatagramSocket socket = new DatagramSocket() ;
     
    Document doc = new Document(racine) ;
    ByteArrayOutputStream b = new ByteArrayOutputStream();
    XMLOutputter sortie = new XMLOutputter(Format.getPrettyFormat()) ;
     
     sortie.output(doc,b);
     byte[] message = b.toByteArray();
     DatagramPacket packet = new DatagramPacket(message,message.length,
                                            new InetSocketAddress("localhost", 55678));
     
    socket.send(packet);
    Coté Serveur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    DatagramSocket socket = new DatagramSocket(55678) ;
    SAXBuilder sxb = new SAXBuilder();
     
    byte[] tampon = new byte[1024] ;
    DatagramPacket packet = new DatagramPacket(tampon,tampon.length);
    socket.receive(packet);
     
    Document doc = sxb.build(new ByteArrayInputStream(packet.getData())) ;

    Merci d'avance pour votre aide

  2. #2
    Expert éminent
    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
    Par défaut
    D'un coté tu crée un document complet, de l'autre tu ne lit que les premier 1024 octets....

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2013
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2013
    Messages : 26
    Par défaut
    Je ne pense pas que l'erreur vienne de là, mon document xml ne comporte qu'une ligne et même en augmentant la taille du byte[] j'ai toujours le même problème...

  4. #4
    Expert éminent
    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
    Par défaut
    Dans ce cas donne nous ton erreur.

    Aussi, tu devrais savoir que la commande receive ne rempli pas nécessairement ton buffer.

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2013
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2013
    Messages : 26
    Par défaut
    J'ai en fait une erreur JDOMException au niveau du sxb.build(new...)

    org.jdom2.input.JDOMParseException: Error on line 3: Contenu non autorisé dans la section de fin.

  6. #6
    Expert éminent
    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
    Par défaut
    ton DatagramPacket contient deux autres méthodes importantes:

    * getOffset(), qui t'indique, dans le tableau retourné par getData(), à partir de quel index se trouve la première donnée qui a été lue (dans ton cas, tu suppose que c'est 0 ce qui n'est pas nécessairement vrai)
    * getLength(), qui t'indique quelle quantité de données ont été lues. Dans ton cas, tu suppose que c'est 1024, ce qui n'est pas nécessairement vrai.

    Té données se trouve dans getData[] entre l'index getOffset() et (getOffset()+getLength())%1024


    Tu va devoir utiliser le constructeur ByteArrayInputStream(byte[] buf, int offset, int length) pour que ça colle.

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

Discussions similaires

  1. Pb de socket udp
    Par phoenixia dans le forum MFC
    Réponses: 7
    Dernier message: 01/06/2006, 17h08
  2. [socket UDP] Codage BER : Format des Tag (TLG)
    Par Lolita59 dans le forum Réseau
    Réponses: 28
    Dernier message: 19/05/2006, 17h37
  3. Socket : UDP ou TCP
    Par lafracas dans le forum Développement
    Réponses: 2
    Dernier message: 10/04/2006, 22h43
  4. code c pour sockets (udp vers tcp et inversement)
    Par HiT dans le forum Développement
    Réponses: 11
    Dernier message: 19/11/2005, 18h03
  5. Notion sur Socket UDP
    Par oxor3 dans le forum Développement
    Réponses: 3
    Dernier message: 05/04/2004, 00h19

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