2010-10-12 7 views
0

Je suis novice en programmation C#. J'ai trouvé la classe TCPListener très utile pour envoyer du texte entre ordinateurs, mais je me demandais s'il est possible d'envoyer directement des objets (en supposant que le client et le serveur ont la définition de classe) entre les machines sans avoir à les convertir en un objet avec ces données.Objets passant C# TCPListener

Merci,

PM

Répondre

2

Une solution pour votre problème en utilisant WCF et marquer vos objets comme Serializable, avec une liaison TCP. Mais c'est une approche tout à fait différente de la solution à base de socket "de bas niveau" que vous avez déjà. Cependant, je vais essayer WCF.

1

Vous ne pouvez pas envoyer des "objets" directement via le réseau. Vous devez soit les convertir en un formulaire binaire ou texte parseable. Pour ce dernier, xml est le mieux adapté souvent. Vous pouvez utiliser BinaryFormatter ou XmlSerializer pour cela.

Si vous voulez vraiment envoyer des objets .NET, car vous ne servez que des clients .net, tcp peut être au niveau bas pour vos besoins. Dans ce cas, jetez un oeil à .net remoting qui vous permet d'échanger directement des objets entre le serveur et le client.

+0

Au lieu de .NET Remoting, regardez dans WCF. –

+0

Y at-il un problème avec .net remoting? – codymanix

0

Tant que les définitions de classe sont les mêmes des deux côtés, vous pouvez utiliser sérialisation binaire pour sérialiser un objet à un flux:

BinaryFormatter bFormatter = new BinaryFormatter(); 
    bFormatter.Serialize(stream, objectToSerialize); 
    stream.Close(); 

Vous feriez mieux d'utiliser WCF comme indiqué plus haut, bien que, depuis Cela va casser si les assemblages sont versionnés de chaque côté du fil.