Accueil > Forum > > > > tcp socket + envoi d'objet
tcp socket + envoi d'objet
dimanche 10 septembre 2006 à 12:33:06 |
tcp socket + envoi d'objet

Blacknight91
|
bonjour, voilà je voudrais créer une connexion tcp client/serveur pour envoyer des données. Ces données sont dans des objets (une datatable par exemple). j'ai regardé sur le forum, il y en a qui parle de serialization d'objet pour permettre l'envoi de celui-ci, mais je ne comprends pas ce que c'est. j'ai également vu des sources de connexions client/serveur tcp, mais à chaque fois les exemples ne sont faits qu'avec des envois de string. Comment faire pour envoyer des objets comme une datatable ? merci de m'expliquer la serialisation si celle-ci est obligatoire. Blacknight91 [ Lien ]
|
|
lundi 11 septembre 2006 à 10:51:29 |
Re : tcp socket + envoi d'objet

aogie
|
Il existe plusieurs type de sérialisation : binaire, SOAP, XML.
Le but est identique : créer une représentation d'un objet, en vue de
le stocker ou de le transmettre. La désérialisation permet ensuite de
retrouver l'objet avec ses paramètres.
Il faut savoir que l'opération de sérialisation ne conserve que le type
et la valeur de chaque variable privée (aucune prise en compte du
nom des méthodes par exemple).
Dans le cas d'une sérialisation binaire (par exemple) : tu devras créer
un flux (MemoryStream) et un formateur binaire (BinaryFormatter), puis
sérialiser ton objet vers le flux grâce à la méthode "Serialize" de ton
BinaryFormatter.
Pour utiliser un tableau d'octets, il ne reste plus qu'à copier le
contenu du flux vers un tableau d'octets de taille équivalente...
Cas particulier de la désérialisation :
Si cette opération est effectuée par le même projet, il n'y a aucun
souci. En revanche, si tu crées une classe permettant l'opération de
sérialisation/désérialisation entre deux projets différents. La
désérialisation échouera car l'en-tête (comportant les attributs de
l'Assembly) est différente.
Pour contourner le problème, il faut ajouter un Binder au
BinaryFormatter, pour contrôler la liaison de l'objet. Il a pour but le
renommage de l'en-tête avec les attributs de l'Assembly courante, juste
avant la tentative de désérialisation.
Celle-ci réussit de ce fait.
-- AOGie --
|
|
mercredi 13 septembre 2006 à 08:37:32 |
Re : tcp socket + envoi d'objet

Blacknight91
|
merci pour tes explications sur la serialization. j'ai bien réussi a sérialiser et envoyer le flux d'octets, par contre comme tu l'as dit, à la désérialisation ca plante car les 2 projets sont différents. Peux tu m'en dire plus sur le Binder, comment l'utiliser ? VS me dit que c'est une classe abstraite qui ne peut etre instancier. Blacknight91 [ Lien ]
|
|
jeudi 14 septembre 2006 à 11:01:17 |
Re : tcp socket + envoi d'objet

aogie
|
Exact, "SerializationBinder" est une classe abstraite.
Il faut créer une classe qui dérive de" SerializationBinder" et surcharger la méthode de liaison de type :
private class DeserializeBinder : SerializationBinder
{
public override Type BindToType(string assemblyName, string typeName)
{
string currentAssemblyName = Assembly.GetExecutingAssembly().FullName;
if (assemblyName != currentAssemblyName)
assemblyName = currentAssemblyName;
return Type.GetType(string.Format("{0}, {1}", typeName, assemblyName);
}
}
Pour une désérialisation binaire, par exemple :
BinaryFormatter bf = new BinaryFormatter();
bf.Binder = new DeserializeBinder();
object o = bf.Deserialize(<stream>);
-- AOGie --
|
|
jeudi 14 septembre 2006 à 22:22:14 |
Re : tcp socket + envoi d'objet

Blacknight91
|
je viens de rajouter le code dans le projet ou je fais la deserialisation, mais j'ai une erreur qui se produit sur celle ci: An unhandled exception of type 'System.Runtime.Serialization.SerializationException' occurred in mscorlib.dll Additional information: End of Stream encountered before parsing was completedas tu une idée du pourquoi ? Blacknight91 [ Lien ]
|
|
vendredi 15 septembre 2006 à 08:32:40 |
Re : tcp socket + envoi d'objet

aogie
|
Tu as vraisemblablement une erreur dans le stream.
Voici un exemple avec sérialisation/désérialisation binaire :
Sérialisation avec un objet "obj" en entrée et un tableau d'octets en sortie :
MemoryStream m = new MemoryStream();
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(m, obj);
byte[] buffer = new byte[m.Length];
Array.Copy(m.GetBuffer(), buffer, buffer.Length);
m.Close();
return buffer;
Désérialisation avec un tableau d'octets "data" en entrée et un objet en sortie :
MemoryStream m = new MemoryStream(data);
BinaryFormatter bf = new BinaryFormatter();
bf.Binder = new DeserializeBinder();
object obj = bf.Deserialize(m);
m.Close();
return obj;
Ces exemples ne comportent aucune gestion d'erreur...
-- AOGie --
|
|
vendredi 15 septembre 2006 à 19:26:36 |
Re : tcp socket + envoi d'objet

Blacknight91
|
j'ai toujours la meme erreur malgré ton code donné. j'ai meme fait le test dans un meme projet, executé 2 fois, (l'un qui serialize et envoi, l'autre qui récupère et deserialize), ils ont les meme assembly normalement ? Blacknight91 [ Lien ]
|
|
dimanche 17 septembre 2006 à 10:48:59 |
Re : tcp socket + envoi d'objet

aogie
|
Je ne vois pas d'où peut provenir l'erreur. Commence par essayer une sérialisation avec un objet très simple. Cela fonctionne, car j'utilise également (avec gestion d'erreur). Ensuite, tu devas peut être te pencher du côté de l'objet que tu sérialises. Cet objet et toutes les variables membres sont sérialisables ? Y-a-t-il une opération effectuée (zippage ou cryptage) qui pourrait modifier la nature du flux ?
Bon courage.
-- AOGie --
|
|
dimanche 17 septembre 2006 à 11:32:31 |
Re : tcp socket + envoi d'objet

Blacknight91
|
est ce que les objets doivent dérivés de la classe ISerializable, ou une classe du meme genre ? je fais ca sur des DataTable et DataSet Blacknight91 [ Lien ]
|
|
dimanche 17 septembre 2006 à 13:04:36 |
Re : tcp socket + envoi d'objet

aogie
|
Les objets doivent posséder l'attribut [Serializable] ou implémenter l'interface ISerializable (ce qui est le cas des deux classes DataTable et DataSet). Il se peut qu'un objet stocké dans un DataSet ne soit pas sérializable. Il me semblait que le Framework possède pourtant tout ce qu'il faut pour la consultation de base de données distantes et que la sérialisation personnelle n'était pas une obligation ?
-- AOGie --
|
|
Cette discussion est classée dans : objet, envoi, client, socket, tcp
Répondre à ce message
Sujets en rapport avec ce message
envoi de fichier sur socket UDP ou TCP [ par jackachi ]
Bonjour, J'ai trouvé beaucoup de code pour envoyer des datas "txt" sur une socket UDP ou TCP. Pourtant je ne trouve rien sur comment envoyé un fichie
choix technologique WCF/socket ? [ par splyit ]
Bonjour à vous,Je me permet de vous demander conseil, car je doit developper une application client serveur en .net et un choix de technologie se pose
Reutiliser un socket [ par dragondeglace ]
VoilaJ'ai créer un chat client-serveur. Le problème est que quand j'arrête la connexion chez le client et chez le serveur et que je veux relancer une
Socket:Event de deconnexion [ par Fildomen ]
saluut tout le monde :) ! voila je bosse sur un projet client-serveur a nouveau lol ! j'ai pu trouver un evenement qui se declanche lors de la tentati
envoi/reception de fichiers socket UDP [ par tenrod ]
Bonsoir,J'ai créé une application client/serveur avec des socket udp.ce que je voudrais c'est pouvoir envoyer des fichiers du serveur vers le client e
Fermeture du socket avant la fin de l'envoi du fichier. [ par leclerpr ]
optenir l'adresse publique de sa machine c# [ par 10demon10 ]
Bonjour à tous Voila j'ai une nouvelle problématique sur mes petites socket, j'ai no-ip de configurer comme il faut ac mon modem-routeur (les ports et
Socket TCP [ par DCWeb ]
Bonjour,Dans le cadre d'un serveur acceptant des connections TCP sur plusieurs ports, est il possible de connaitre le port sur lequel l'appli client s
Socket et PDA [ par enzyme ]
Bonjour,J'arrive faire communiquer 2 PC ensembles via d'un coté Socket , Bind Listen (Serveur) et NetWorkStream (client)et là pas de problèmes je peu
C# client srveur socket [ par hboutellaa ]
Bonjour à tout le monde. J'ai à développer une application client-serveurs.le client est développé en Visuel c++ 6 et le serveur en Visuel C# 2005.j'a
Livres en rapport
|
Derniers Blogs
TECHDAYS PARIS 2010 : PLEINIèRE DERNIER JOURTECHDAYS PARIS 2010 : PLEINIèRE DERNIER JOUR par ROMELARD Fabrice
Cette session est la dernière pleinière de ces 3 jours de TechDays Paris 2010. Généralement, cette troisième journée est plus axée sur l'avenir vu par Microsoft. Après un retour sur l'avenir vu par la Science Fiction ou par ...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice UNE JOLIE-HORLOGE ET PAS QU'UN PEU !UNE JOLIE-HORLOGE ET PAS QU'UN PEU ! par neodante
Pour les possesseurs d'iPhone, ça y est Bijin Tokei - qui se traduit littéralement en Français par " Jolie Horloge " - est arrivé et GRATUITEMENT s'il vous plaît ! Après la version Tokyo, Hokkaido, night club, racing, Gal, "pour les mademoiselles'", . voi...
Cliquez pour lire la suite de l'article par neodante TECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICESTECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICES par ROMELARD Fabrice
Animé par: Gaetan Bouveret et Julien Chomarat Business Connectivity Services (BCS) est dans SharePoint 2010 la version 2 de Business Data Catalog (BDC dans SharePoint 2007). Il s'agit de la solution permettant de visualiser des données provenan...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice [DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE[DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE par orion
Comme de nombreux geek, je suis un grand amateur de série TV et je rate régulièrement des épisodes de mes séries préférés. Une solution s'offre à vous avec ce merveilleux site : Tv Gorge - www.tvgorge.com Moteur de recherche à l'appui, vous pouvez ...
Cliquez pour lire la suite de l'article par orion TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010 par ROMELARD Fabrice
Animé par: Vincent Bellet et Baptiste Giraudier La BI dans SharePoint 2010, Les nouveaux services d'application dans SP2010 et SQL Server Reporting services 2008 R2. La BI dans SharePoint est généralisée pour tous afin de permettre à tous les coll...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Logiciels
DB-MAIN (9.1.0)DB-MAIN (9.1.0)DB-MAIN is a data-modeling and data-architecture tool. It is designed to help developers and anal... Cliquez pour télécharger DB-MAIN Xilisoft DPG Convertisseur (5.1.37.0120)XILISOFT DPG CONVERTISSEUR (5.1.37.0120)Xilisoft DPG Convertisseur offre aux fans de Nintendo DS une bonne solution leur permettant de dé... Cliquez pour télécharger Xilisoft DPG Convertisseur GraphicsGale (2.01.01)GRAPHICSGALE (2.01.01)GraphicsGale est un logiciel de PixelArt avec de nombreuse fonctionnalités permettant de réalisé ... Cliquez pour télécharger GraphicsGale Architecte 3D (Platinum 2010)ARCHITECTE 3D (PLATINUM 2010)Architecte 3D Platinium vous permet de concevoir facilement les plans votre future maison, de l'é... Cliquez pour télécharger Architecte 3D TeamViewer 5 (TeamViewer 5)TEAMVIEWER 5 (TEAMVIEWER 5)Dépanner un ami,expliquer une manipulation devient un jeu d'enfant.
Prise en main d'un autre ord... Cliquez pour télécharger TeamViewer 5
|