C# Serialisation & Socket

Discussion dans 'Questions / Réponses' créé par Perospero, 11 Juillet 2018.

  1. Perospero

    Perospero Membre

    Inscrit:
    2 Juin 2018
    Messages:
    6
    J'aime reçus:
    0
    Bonsoir,
    je suis actuellement entrain de faire une petite application client/serveur asynchrone où je rencontre un souci lorsque je souhaite récupérer ma variable 'name' lors de la sérialisation :

    Code (C#):
            public byte[] Serialize()
            {
                List<byte> byteList = new List<byte>();
                byteList.AddRange(BitConverter.GetBytes(this.Age)); // 4 octets
                byteList.AddRange(BitConverter.GetBytes((short)this.Sex)); // 2 octets
                byteList.AddRange(BitConverter.GetBytes((short)this.Nationality.Length)); // 2 octets
                byteList.AddRange(Encoding.ASCII.GetBytes(this.Nationality)); // Length
                byteList.AddRange(BitConverter.GetBytes((short)this.Name.Length)); // 2 octets
                byteList.AddRange(Encoding.ASCII.GetBytes(this.Name)); // Length
                return byteList.ToArray();
            }
            public static Person Deserialize(byte[] data)
            {
                int age = BitConverter.ToInt32(data, 0);
                SexEnum sex = (SexEnum)BitConverter.ToInt16(data, 4);
                short nationalityLength = BitConverter.ToInt16(data, 6);
                string nationality = Encoding.ASCII.GetString(data,8, nationalityLength);
                short nameLength = BitConverter.ToInt16(data, 8 + nationalityLength);
                string name = Encoding.ASCII.GetString(data, 8 + nationalityLength + nameLength, nameLength);
                return new Person(age, name, sex, nationality);
            }
    Le résultat obtenu est le suivant : https://www.noelshack.com/2018-28-3-1531343989-capture.png
    Au lieu d'obtenir Perospero j'obtient les 2 dernières lettres.

    Par ailleurs j'aimerais savoir comment faire une communication réseau d'objet via le NetworkStream du socket avec les class binaryWriter et binaryReader, une fois que j'écris dans le flux du socket je ne sais pas comment je peux envoyer et récupérer de l'autre coté mes données afin de les désérialiser avec binaryReader

    Merci pour toutes aides
     
  2. Headspace

    Headspace Membre

    Inscrit:
    10 Juillet 2018
    Messages:
    8
    J'aime reçus:
    3
    Pourquoi tu t'embêtes avec BitConverter, vois plutôt du coté de BinaryWriter et BinaryReader.
     
  3. Soap

    Soap Membre

    Inscrit:
    12 Avril 2017
    Messages:
    72
    J'aime reçus:
    4
    Justement j aimerai bien mais que faire une fois les donnez-vous serialisé dans le networkstream du socket comment je peux envoyer et recevoir ces bytes
     
  4. Headspace

    Headspace Membre

    Inscrit:
    10 Juillet 2018
    Messages:
    8
    J'aime reçus:
    3
    [​IMG]
     
  5. Perospero

    Perospero Membre

    Inscrit:
    2 Juin 2018
    Messages:
    6
    J'aime reçus:
    0
    Du coup avec les sockets j'écrirais dans le flux de ce dernier avec l'objet qui l'encapsule NetworkStream mais une fois écrit dans le flux comment je peux manipuler ces données(send,receive)
     
  6. Fallen

    Fallen Membre

    Inscrit:
    18 Février 2015
    Messages:
    226
    J'aime reçus:
    55
    Qu'est ce que tu entends par manipuler les données dans le flux écrit ?
     
  7. Perospero

    Perospero Membre

    Inscrit:
    2 Juin 2018
    Messages:
    6
    J'aime reçus:
    0
    Peut etre je m exprime mal mais ma question principale c’est celle la : comment je peux avec les sockets et les class BinaryReader et BinaryWriter etablir une communication entre client et serveur
     
  8. isodidacte

    isodidacte Membre

    Inscrit:
    18 Février 2017
    Messages:
    100
    J'aime reçus:
    6
    Tu peux pas avec eux, c'est pas ça qui gère le système socket
     
  9. Headspace

    Headspace Membre

    Inscrit:
    10 Juillet 2018
    Messages:
    8
    J'aime reçus:
    3
    Du coup pour la communication, premièrement tu sérialises tes données, puis tu peux les envoyer comme dans cet exemple :

    [​IMG]

    Après avec les bytes que tu reçois, tu utilises BinaryReader :

    [​IMG]
     
  10. neross

    neross Membre Actif

    Inscrit:
    20 Décembre 2014
    Messages:
    156
    J'aime reçus:
    51
    Un socket contient un buffer, c'est là où sont stocker les données.
    Tu récupère les bytes de ton buffer, tu les mets dans le BinaryReader et tu lie. :)
     
  11. Perospero

    Perospero Membre

    Inscrit:
    2 Juin 2018
    Messages:
    6
    J'aime reçus:
    0
    C'était exactement sa ce que je recherchais :inlove: Merci tu es d'une grande aide.
    Yes effectivement, après c'été surtout pour la partie BinaryWriter que j'étais perdu :)
     

En naviguant sur ce site web, vous acceptez les Termes et Conditions d'utilisation. Tout le contenu que vous pourrez trouver sur ce site est soumis à la license Creative Commons.