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 :

erreur reception string par paquet


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2011
    Messages : 87
    Par défaut erreur reception string par paquet
    Bonsoir,

    Lors d'un projet java qui doit échanger des données entre client/serveur en UDP, je ne récupère pas la bonne valeur de string :
    J'envois (en C) un message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    snprintf(buf, 30, "mot1 mot2 %d" , val);
    Je receptionne (en Java) le message en faisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    String packetRecu = new String(packet.getData());
    	   packetRecu = packetRecu.trim();
               String str[] = packetRecu.split(" ");
    	   int val = Integer.valueOf(str[2]);
    "trim" est censé supprimé le "reste de la chaine non utilisé du buf" : ça marchait quand je faisait un envoi en java mais ça ne marche plus quand j'envois à partir du C.
    au lieu d'avoir "15" dans str[2] j'ai "15 ÿÿÿX'a W"

    Savez vous comment faire pour ne récupérer que le 15 ?

  2. #2
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Je connais 3 manières d'envoyer des chaines de caractères sur un flux TCP :
    1. Soit on utilise un délimiteur spécifique qui permet au récepteur de savoir quand se termine la chaine de caractères
    2. Soit on ne transmet que des chaines de caractères d'une longueur données qui ne change pas (éventuellement en rajoutant des caractères de bourrage ou bien en tronquant la chaine de caractères
    3. Soit avant d'envoyer la chaine de caractères, on envoie sa longueur de manière à ce que le récepteur sache la longueur à recevoir (et éventuellement fasse la bonne allocation mémoire).


    A mon avis, la 3eme méthode, bien que un tout petit peu plus complexe, est la plus évolutive et ne te décevra jamais.
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  3. #3
    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 Misaki43
    Savez vous comment faire pour ne récupérer que le 15 ?
    Oui, mais ce n'est pas comme ça qu'il faut faire.
    Il y a un bug dans ton code C qui envoie trop de données (en l'occurrence, un tableau de 30 octets alors que le message à envoyer en fait... Un peu moins.) Il faut corriger ton code C pour qu'il n'ait pas de bug. Ce n'est pas une question Java.

    Citation Envoyé par ram-0000 Voir le message
    Je connais 3 manières d'envoyer des chaines de caractères sur un flux TCP :
    Là c'est un paquet UDP, pas un flux. La taille des données est indiquée par le protocole, et Java fait en sorte qu'on ait pas besoin de s'en occuper.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2011
    Messages : 87
    Par défaut
    exact problème résolu

    J'ai changé le C en transmettant que la taille exacte de la chaîne (mon problème était que je savais pas combien il y avait de chiffre pour la valeur entière "val" du coup j'ai fait si val<10 on compte +1 sinon +2 mais bon c'est pas terrible je trouve).

    Voilà avant de marquer résolu dites moi si vous avez mieux mais demain je le mettrais en résolu après avoir lu vos suggestions

    Merci pour votre aide !

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

Discussions similaires

  1. Erreur "Fichier utilisé par un autre processus"
    Par solo3326 dans le forum Langage
    Réponses: 3
    Dernier message: 18/08/2005, 16h55
  2. Remplissage d'un string par des blancs
    Par hunter001 dans le forum SL & STL
    Réponses: 12
    Dernier message: 13/05/2005, 19h56
  3. Réponses: 2
    Dernier message: 15/03/2005, 15h40
  4. Regroupage par paquet
    Par Sniper94-2 dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 02/02/2005, 12h23
  5. découper un string par rapport à un char
    Par yarf dans le forum C++
    Réponses: 4
    Dernier message: 09/12/2004, 17h52

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