C# Serialisation & Socket

Inscrit
2 Juin 2018
Messages
32
Reactions
0
#1
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 :

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
 
Inscrit
12 Avril 2017
Messages
72
Reactions
2
#2
Pourquoi tu t'embêtes avec BitConverter, vois plutôt du coté de BinaryWriter et BinaryReader.
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
 
Inscrit
2 Juin 2018
Messages
32
Reactions
0
#3
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)
 
Inscrit
18 Février 2015
Messages
228
Reactions
7
#4
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)
Qu'est ce que tu entends par manipuler les données dans le flux écrit ?
 
Inscrit
2 Juin 2018
Messages
32
Reactions
0
#5
Qu'est ce que tu entends par manipuler les données dans le flux écrit ?
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
 
Inscrit
18 Février 2017
Messages
149
Reactions
18
#6
Tu peux pas avec eux, c'est pas ça qui gère le système socket
 

neross

Membre Actif
Inscrit
20 Decembre 2014
Messages
150
Reactions
0
#7
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
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. :)
 
Inscrit
2 Juin 2018
Messages
32
Reactions
0
#8
Du coup pour la communication, premièrement tu sérialises tes données, puis tu peux les envoyer comme dans cet exemple :



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

C'était exactement sa ce que je recherchais :inlove: Merci tu es d'une grande aide.
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. :)
Yes effectivement, après c'été surtout pour la partie BinaryWriter que j'étais perdu :)
 
Haut Bas