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

C# Discussion :

Envoyer une struct via le réseau


Sujet :

C#

  1. #21
    Expert confirmé
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Par défaut
    Et avec cette struct ça marche pas ? (parce que j'ai pas l'impression que c'est ce que tu fais avec le code que tu dit ne pas être propre ...)

  2. #22
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 62
    Par défaut
    effectivement le code pas propre je l'avias écrit a la base dans l"optique de recevoir une struct avec un tableau.

    Maintenant mon pb c'est que avec la manière pas propre (sans ta classe pour la réception), je n'arrive pas a détecter les int de ma nouvelle struct

    c'est peut etre mon encodage en ascii, surement meme, mais je ne sais pas lequel utiliser autrement

  3. #23
    Expert confirmé
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Par défaut
    tu es sur que ton programme C envoi de l'ASCII ?

  4. #24
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 62
    Par défaut
    J'avoue que je ne connais pas le codage (j'ai pas le code ici chez moi), mais je pense que il n'y a pas de codage spécifique ....
    C'est une structure C qui est remplit puis envoyer sur le réseau (convertit en byte)

  5. #25
    Expert confirmé
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Par défaut
    oui mais par exemple le char de .net est un char unicode, essayes de remplacer les char par des byte, enfin, je sais pas trop ça me parait étrange ...

  6. #26
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 62
    Par défaut
    Je pense que avec ta classe cela serai plus simple quand même ... mon pb initial était que je retrouve toujours la même valeur en utilisant ReadBlock.

    Pcq passer par la technique moins propre ca nécessite de savoir, l'encodage des données etc ...
    Pcq en C un caractère est codé sur 1 octet mais un entier sur 4 octets, alors bon ...


    tu as une idée de pk mon code avec ta méthode ReadBlock, me renvoi plusieurs fois la meme valeur (la première recue?)

  7. #27
    Expert confirmé
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Par défaut
    En changeant char en byte ça devrais marcher si le caractère est codé sur 1 octet.

    Citation Envoyé par glouffy6 Voir le message
    tu as une idée de pk mon code avec ta méthode ReadBlock, me renvoi plusieurs fois la meme valeur (la première recue?)
    non justement, aucune. Normalement ReadBlock lit et fait avancer le flux ... peut être si tu augmentes lestream.Position mais ça risque de te renvoyer un InvalidOperationException.

  8. #28
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 62
    Par défaut
    avec la méthode bourrin j'ai aucun pb pour récupérer des char, mon pb est que j'arrive pas a récupérer les int de la structure .....

  9. #29
    Expert confirmé
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Par défaut
    Bon attend, on va reprendre tout.
    Tu arrives à lire tout ce que tu veux avec la méthode bourrin ok. Sauf que là le problème ne me saute pas aux yeux.
    Si tu peut fait un truc : utilise la méthode bourrin pour tout enregistrer tel quel dans un fichier. Poste ce fichier ici. Et (re)poste la structure des données que tu dois avoir.

  10. #30
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 62
    Par défaut
    En fait j'arrive a tout lire sauf les int en fait bref.

    Ok ca roule, par contre j'aurai accès a la machine executant le code C que demain entre midi et deux. Je posterai donc ca a ce moment là.

    Merci de m'aider !

  11. #31
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 62
    Par défaut
    En PJ, le fichier de ce que je reçois via ce code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
    do
                    {
                        indexFlux = this.client.GetStream().ReadByte();
                        MessageBox.Show(indexFlux.ToString());
     
                    } while (indexFlux != -1);
    Ce qui m'est envoyé est une structure contenant les infos suivantes:

    char typeDonnee; -> I
    char car; -> O
    short longueur; -> 99
    int angleEpaule; -> 1
    int angleCoude; -> 2
    int anglePoignet; -> 3
    int vitesse; -> 4
    int nbOrdre; -> 5
    Fichiers attachés Fichiers attachés

  12. #32
    Expert confirmé
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Par défaut
    Mais non, là tu me donnes un truc bizarre. Moi je parlais du fichier tel quel, reçu avec par exemple
    Code c# : 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
     
    using(FileStream f_dest = new FileStream("c:\\out.txt", FileMode.Create))
    {
      Stream data = this.client.GetStream();
     
      byte[] buf = new byte[16];
      int i = 0;
      while (true)
      {
        i= data.Read(buf, 0, buf.Length);
        f_dest.Write(buf, 0, i);
     
        if (i <= 0)
          break;
      }
     
      f_dest.Flush();
    }

    Ensuite sur le même principe pour lire tes données normalement tu dois faire ça :
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
      Stream data = this.client.GetStream();
     
      byte[] buf = new byte[16];
      int i = 0;
      while (data.DataAvailable)
      {
        la_struct_bidule current = (la_struct_bidule)StructGetter.ReadBlock(data, typeof(la_struct_bidule);
     
        /* traitement de current */
      }

  13. #33
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 62
    Par défaut
    Ok d'accord je note ca, je testerai ca lundi et je te dirai le resultat.

    Merci bcp!!!

  14. #34
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 62
    Par défaut
    yeah !!!!!!!!!!!!!!!!!!!!!!!

    Merci nickel ca marche, désolé, du temps de réponse, j'avais pas trop eu le tps de bosser sur le projet, javais des partiels, mais en tout cas maintenant ca marche et on a fait un bon de géant dans notre projet !!!

  15. #35
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 62
    Par défaut
    encore un petit pb ..... ou je galère dessus

    j'ai un structure de cette forme :

    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
     
     
    //Création des structures
            public struct ordreEnvoiStruct
            {
                public char typeDonnee;
                public char car;
                public short longueur;
                public int period;
                public int angleEpaule;
                public int angleCoude;
                public int anglePoignet;
                public int vitesse;
                public int nbOrdre;
                public double[] tabPositionEpaule;
                public double[] tabPositionCoude;
                public double[] tabPositionPoignet; 
            }
    j'essaie d'envoyer une structure (ou plusieurs) comme ca via le réseau et la classe que tu m'as donné lève une exception à cet endroit :

    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
     
     
    public static void GetBytes(object val,
                                          [In, Out] byte[] buffer,
                                         int offset,
                                        int bufsize)
            {
                if (val == null)
                    throw new ArgumentNullException("val");
     
                int size = SizeOf(val);
                IntPtr p = Marshal.AllocHGlobal(size);
     
                try
                {
                    Marshal.StructureToPtr(val, p, true);
                    Marshal.Copy(p, buffer, offset, bufsize);
                    //Je reajoute un catch
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
     
                }
                finally
                {
                    Marshal.FreeHGlobal(p);
                }
            }
    Le message de l'exception est :

    Tentative de lecture ou d'écriture de mémoire protégée. Cela indique souvent qu'une autre mémoire est endommagée


    une idée?

  16. #36
    Expert confirmé
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Par défaut
    Comment appelles-tu le code ?
    Sinon, essayes de définir explicitement la taille de ton array :
    Code c# : 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
    public struct ordreEnvoiStruct
            {
                public char typeDonnee;
                public char car;
                public short longueur;
                public int period;
                public int angleEpaule;
                public int angleCoude;
                public int anglePoignet;
                public int vitesse;
                public int nbOrdre;
                [MarshalAs(UnmanagedType.ByValArray, SizeConst = 1024)]
                public double[] tabPositionEpaule;
                [MarshalAs(UnmanagedType.ByValArray, SizeConst = 1024)]
                public double[] tabPositionCoude;
                [MarshalAs(UnmanagedType.ByValArray, SizeConst = 1024)]
                public double[] tabPositionPoignet;
            }
    Ou alors vu que ce sont les derniers éléments, envoi les double[] à la main en ne laissant dans le struct que des int pour savoir combien d'éléments il y a dans le flux. (La conversion double > byte[] > double est simple, regarde la classe BitConverter).

  17. #37
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 62
    Par défaut
    Merci bcp pour ta réponse. Malheureusement j'ai rendu mon projet aujoud'hui et j'vais pas vu ton post hier ... mais bon c'est pas trop grave je ferai passer ta réponse a mon prof, dans le cas ou il repasse le projet l'année prochaine

    Merci en tout cas

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Envoyer une image via un $_FILES
    Par Monsieur Griboux dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 16/04/2013, 02h51
  2. [PHP 5.2] envoyer une variable via un lien
    Par tinkerbell dans le forum Langage
    Réponses: 2
    Dernier message: 16/03/2009, 14h44
  3. Envoyer une photo via mon formulaire
    Par cdevl32 dans le forum Langage
    Réponses: 12
    Dernier message: 13/09/2007, 23h37
  4. envoyer une image via un formulaire vers son mail
    Par cdevl32 dans le forum Langage
    Réponses: 2
    Dernier message: 02/09/2007, 21h52
  5. Réponses: 2
    Dernier message: 21/06/2006, 15h14

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