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

Contribuez .NET Discussion :

[C#] Comment implémenter le passage d'un objet dans une socket ? [FAQ]


Sujet :

Contribuez .NET

  1. #1
    pbn
    pbn est d�connect�
    Membre r�gulier
    Inscrit en
    Septembre 2005
    Messages
    10
    D�tails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 10
    Par d�faut [C#] Comment implémenter le passage d'un objet dans une socket ?
    J'ai un objet personnel : Grille � envoyer � un serveur.
    J'utilise ceci :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    Socket maSocket = new Socket();
    ...
    byte[] buffer;
    MaSocket.send(buffer, buffer.length, SocketFlags.None);
    C'est une m�thode que j'ai trouv�e mais je n'y arrive pas car je n'arrive pas � convertir l'objet Grille en tableau de byte.

    Merci pour vos r�ponses.

  2. #2
    Expert confirm�
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    D�tails du profil
    Informations personnelles :
    �ge : 65
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Par d�faut
    il faudrait que tu nous en dises plus de cet objet Grille pour qu'on puisse t'aider � le convertir en Bytes

  3. #3
    pbn
    pbn est d�connect�
    Membre r�gulier
    Inscrit en
    Septembre 2005
    Messages
    10
    D�tails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 10
    Par d�faut
    L'objet Grille contient 3 variables de type integer , un tableau d'objets � 2 dimensions + ses m�thodes.

  4. #4
    Expert confirm�
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    D�tails du profil
    Informations personnelles :
    �ge : 65
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Par d�faut
    peut �tre en passant par une serialisation binaire
    Classe BinaryFormatter
    tu devrais pouvoir recup�rer le BinaryStream sous la forme d'un Byte[]

  5. #5
    R�dacteur
    Avatar de abelman
    Inscrit en
    F�vrier 2003
    Messages
    1 106
    D�tails du profil
    Informations forums :
    Inscription : F�vrier 2003
    Messages : 1 106
    Par d�faut
    +1 avec neguib (j'aime bcp ton avatar ;-))

  6. #6
    pbn
    pbn est d�connect�
    Membre r�gulier
    Inscrit en
    Septembre 2005
    Messages
    10
    D�tails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 10
    Par d�faut
    merci neguib
    J'essaierai avec �a

  7. #7
    pbn
    pbn est d�connect�
    Membre r�gulier
    Inscrit en
    Septembre 2005
    Messages
    10
    D�tails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 10
    Par d�faut
    Si je comprend bien le principe :

    Cot� Client
    - Je s�rialise ma classe OK
    - Puis je r�cupere []byte OK
    - Ensuite je l'envoie dans la socket OK

    Cot� serveur
    - Je r�cupere []byte OK
    - Puis il faut que je le d�s�rialise ??
    (Faut-il que je le remette dans un fichier pour pouvoir le d�s�rialiser ?? )

  8. #8
    Expert confirm�
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    D�tails du profil
    Informations personnelles :
    �ge : 65
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Par d�faut
    Ben tout depends de ce que tu dois en faire, tu envoies cet objet pourquoi pour quel traitement :

  9. #9
    R�dacteur
    Avatar de dev01
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 451
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 451
    Par d�faut
    Salut .

    il faut pour que ton objet soit utilisable � la r�ception que tu le d�s�rialises effectivement .

    Pour qu'un objet soit s�rialisable il faut que la classe de cette objet soit marqu� comme �tant s�rialisable :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
     
    [Serialisable]
    public class testSeri
    {
     
    }

  10. #10
    R�dacteur
    Avatar de abelman
    Inscrit en
    F�vrier 2003
    Messages
    1 106
    D�tails du profil
    Informations forums :
    Inscription : F�vrier 2003
    Messages : 1 106
    Par d�faut
    Citation Envoy� par pbn
    Cot� serveur
    - Je r�cupere []byte OK
    - Puis il faut que je le d�s�rialise ??
    (Faut-il que je le remette dans un fichier pour pouvoir le d�s�rialiser ?? )
    Oui tu deserialize toujours avec BynaryFormatter et MemoryStream.
    Pas besoin de mettre dans un fichier.

    Si tu y arrives pas je filerai un exple ;-)

  11. #11
    pbn
    pbn est d�connect�
    Membre r�gulier
    Inscrit en
    Septembre 2005
    Messages
    10
    D�tails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 10
    Par d�faut
    j'ai bien mis
    devant ma classe de ce cot� la pas de probleme

    J'ai r�ussi a s�rialiser avec BynaryFormatter et MemoryStream
    Je le passe ensuite dans la socket

    Mais quand j'essaie de d�serialiser
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    ClientSocket.Receive(btDonneesTransf, btDonneesTransf.Length, SocketFlags.None);
    MemoryStream memStream = new MemoryStream(btDonneesTransf.Length+1);
    try 
    {
    	memStream.Position = 0;
    	memStream.Write(btDonneesTransf, 0, btDonneesTransf.Length-1);
    	BinaryFormatter formatter = new BinaryFormatter();
            maClasse =  (Classe)formatter.Deserialize(memStream);
            ....
    }
    .....
    j'ai une exception qui est lev�e
    Fin de flux rencontr�e avant la fin de l'analyse

  12. #12
    R�dacteur
    Avatar de abelman
    Inscrit en
    F�vrier 2003
    Messages
    1 106
    D�tails du profil
    Informations forums :
    Inscription : F�vrier 2003
    Messages : 1 106
    Par d�faut
    Tu es sur que tout ton objet re�u en un seul appel de Receive?
    Quelle est la taille de ton buffer?

  13. #13
    pbn
    pbn est d�connect�
    Membre r�gulier
    Inscrit en
    Septembre 2005
    Messages
    10
    D�tails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 10
    Par d�faut
    le buffer fait 147 (si c'est la taille du tableau que tu me demande)

  14. #14
    R�dacteur
    Avatar de abelman
    Inscrit en
    F�vrier 2003
    Messages
    1 106
    D�tails du profil
    Informations forums :
    Inscription : F�vrier 2003
    Messages : 1 106
    Par d�faut
    Citation Envoy� par pbn
    le buffer fait 147 (si c'est la taille du tableau que tu me demande)
    Il n'est pas assez grand. Ton objet fait surement plus de 147 octets et avec la s�rialisation �a augmente encore.
    Pourquoi 147?
    Il y a une raison?
    Sinon essaye plus grand. 1024 par exemple

  15. #15
    pbn
    pbn est d�connect�
    Membre r�gulier
    Inscrit en
    Septembre 2005
    Messages
    10
    D�tails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 10
    Par d�faut
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
     
    formatter.Serialize(memStream, maClasse);
    Console.WriteLine(memStream.Length.ToString())   // 147;
    147 c'est la valeur de memStream apres la s�rialisation

  16. #16
    R�dacteur
    Avatar de abelman
    Inscrit en
    F�vrier 2003
    Messages
    1 106
    D�tails du profil
    Informations forums :
    Inscription : F�vrier 2003
    Messages : 1 106
    Par d�faut
    Je parle de la taille du tableau de bytes (lol �a me fait tjrs rire �a j'y peux rien) btDonneesTransf

  17. #17
    pbn
    pbn est d�connect�
    Membre r�gulier
    Inscrit en
    Septembre 2005
    Messages
    10
    D�tails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 10
    Par d�faut
    je l'ai mis � 1024 comme tu m'as dis et �a marche
    Merci

    mais je croyais qu'il devait �tre de la m�me taille que memStream
    Y a t'il un moyen de savoir exactement � quel taille je dois l'initialiser ?
    du style
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    byte[] btDonneesTransf = new byte[quelqueChose.length]
    Je sais pas si je dois cr�er un autre sujet mais j'ai une seconde question :

    Je dois passer un autre objet comment faire la diff�rence (pour celui qui re�oit) entre les 2 objets (pour pouvoir utiliser la d�serialisation appropri�)?

  18. #18
    R�dacteur