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

avec Java Discussion :

préparer le buffer pour un paquet à envoyer


Sujet :

avec Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 159
    Par défaut préparer le buffer pour un paquet à envoyer
    Bonjour

    voila j'ai un petit probleme pour construire mon paquet que je doit l'envoyer par une soket, j'ai créré mon paquet avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    byte buffer[] =null;
    Datagrampacket  paquet = new Datagrampacket (buffer, var.lenght,addr,2002)
    jusqu'au là tous marche bien,

    mais pour construire mon paquet je doit définir les donnée que je doit envoyer dans le buffer,et moi je veux envoyer exactement :

    Buffer= int int String String Real Real
    ex : buffer : 15 -15 TEST VAR 13.2 45.34

    voila c'est ça le probleme exactement c'est que j'arrive pas a construire mon buffer comme je veux exactement sachant que le buffer il est de type byte[]


    donc si vous avez des idées n'hésiter pas merci

  2. #2
    Membre Expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Par défaut
    idée: convertir la string vers un byte[]?

    cf. String#getBytes(String)

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 159
    Par défaut
    Bonjour

    merci pour ta réponse mais justement c'est pas just un String, pour le string c'est le plus facile. voila ce que je doit faire exactement
    convertir INT --> Byte[]
    Convertir String --> Byte[]
    Convertir Real --> Byte[]

    et enfin concaténer ou enregistré les trois résultat obtenu dans le buffer pour envoyer le tous dans un paquet.

    j'éspere que c'est plus claire maintenant

    merci

  4. #4
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Par défaut
    Juste par hasard. Tu es sûr de vouloir utiliser une connexion UDP (DatagramSocket et DatagramPacket) et non une connexion TCP ?

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 159
    Par défaut
    oui d'apres le cahier de charge il demande une connection UDP donc je suis obliger

  6. #6
    Membre Expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Par défaut
    Oui j'ai bien compris, mais de mélanger int encodés binaires + strings encodées dans un charset spécifique + float ou double etc.. n'est pas forcément une bonne idée

    au moins quand tu transfère en mode texte, c'est humainement compréhensible et plus simple à décoder

    maintenant, si vraiment tu n'as pas le choix (si tu dois communiquer avec un système existant) alors il faut utiliser les décalages

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    int i = 542;
     
    byte[] theint = new byte[4];
    theint[0] = (byte) i;
    theint[1] = (byte) (i >> 8);
    theint[2] = (byte) (i >> 16);
    theint[3] = (byte) (i >> 24);
    mais rien ne garantit que ce format sera accepté par le receveur... à moins que tu nous expliques exactement la situation...


    PS: merci de ne pas envoyer de MP pour des sujets ouverts sur le forum

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 159
    Par défaut
    merci bcp pour ta réponse justement c'est ça le probleme je doit communiqué avec un API qui éxiste déja et je doit le répondre éxactement comme ça
    donc voila pour le INT je pense que ça me va comme réponse je vais essayé ça mais pour le Real je doit faire comment par exemple pour 452,53 ???!!!

    merci

  8. #8
    Membre Expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Par défaut
    idem, sauf qu'un double est encodé sur 64 bits donc 8 byte, donc il te faut un tableau de 8 cellules + 8 décalages

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    double d = 452.3254;
     
    byte[] thedouble = new byte[8];
    thedouble[0] = (byte) d;
    thedouble[1] = (byte) (d >> 8);
    thedouble[2] = (byte) (d >> 16);
    thedouble[3] = (byte) (d >> 24);
    thedouble[4] = (byte) (d >> 32);
    ...

Discussions similaires

  1. paquets envoyés plus importants que ceux recus
    Par joe123 dans le forum Hardware
    Réponses: 12
    Dernier message: 14/12/2006, 13h05
  2. Z-Buffer pour transparence inexistant ?
    Par Bart_lx dans le forum OpenGL
    Réponses: 12
    Dernier message: 31/01/2006, 15h25
  3. Alignement de buffers pour le xmmx
    Par Flo. dans le forum x86 32-bits / 64-bits
    Réponses: 2
    Dernier message: 24/01/2006, 10h11
  4. buffer pour fichier
    Par Bug's Bunny dans le forum C
    Réponses: 6
    Dernier message: 11/06/2004, 13h21

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