Serialisieren von Objekt zum senden bereit über TCPClient-Stream
Ich habe einen server und einen client einrichten mit TcpListener
und TcpClient
.
Ich ein Objekt senden möchten, um meine server-Anwendung für die Verarbeitung.
Habe ich entdeckt, die using System.Runtime.Serialization
und die folgenden Dokumentation, aber ich wollte nicht zu faff um zu finden, ich Tue es in langatmige Art und Weise.
Die Frage: Was ist der beste Weg, um zu verarbeiten und senden Sie ein Objekt über den TCP-stream?
Senden und empfangen.
Hier ein Beispiel von meinem Objekt:
//Create a new house to send
house newHouse = new house();
//Set variables
newHouse.street = "Mill Lane";
newHouse.postcode = "LO1 BT5";
newHouse.house_number = 11;
newHouse.house_id = 1;
newHouse.house_town = "London";
InformationsquelleAutor Luke | 2011-10-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
Vorausgesetzt, Sie haben eine Klasse
House
(auf beiden Seiten der Verbindung) wie folgt suchen:Können Sie serialisieren, wird die Klasse in eine
MemoryStream
. Sie können dann in IhremTcpClient
Zusammenhang wie diesem:Natürlich haben Sie ein wenig mehr zu tun Untersuchung zu machen, das Programm läuft ohne Ausnahme. (z.B. Überprüfen
memoryStream.Length
nicht größer als ein int, ein.s.o.), aber ich hoffe, ich gab Ihnen die richtigen Anregungen, um Sie auf Ihrem Weg helfen 😉Vielen Dank für deinen Tipp, ich habe die Probe auf diese Weise!
InformationsquelleAutor Fischermaen
Deine Antwort impliziert das folgende Objekt (es ist übliche Praxis, Namen-Klassen mit camel-case):
Nun können Sie Ihre Objekte serialisieren:
InformationsquelleAutor PVitt
Können Sie einfach dekorieren Sie Ihr
House
Klasse mit der[Serializable]
Attribut. (Sie brauchen nicht zu definieren, alle anderen Sachen wie gepostet in der anderen Antwort)Senden Sie dieses Objekt auf den Draht durch serialisieren es mit der
BinaryFormatter
Klasse.Haben Sie sich überlegt die Einrichtung eines WCF-Diensts, anstatt TcpListener und TcpClient ? Macht das Leben viel einfacher.
Beispielsweise könnten Sie einen service definieren, dass wieder ein Haus
Sehen diese realen Welt Beispiel.
InformationsquelleAutor wal
Wie würden Sie Deserialisieren des xml-House stream zurück, um ein Haus-Objekt auf der Empfängerseite?
Ich bin auf die Lösung gegeben, in Fischermaen Antwort.
Auf meinem Empfang Ende sehe ich einen string in meiner Ausgabe-Fenster mithilfe der folgenden:
Vielen Dank im Voraus.
BEARBEITEN *
Ok, auch diese Lösung hat für mich gearbeitet. Vielleicht brauchen einige das Aufräumen.
Hier ist eine Methode zum Deserialisieren von Strings:
Dann von meinem TPC/IP Empfang Ende habe ich die Methode aufrufen, etwa so:
InformationsquelleAutor RobHurd
Erstellen Sie zuerst eine leere ServerApplication und ClientApplication als Konsolen-Anwendung zur Vereinfachung der Beispiel.
Dann legt man die definition für die serializable-Objekt in einer separaten assembly, und fügen Sie dann einen Verweis auf die gemeinsam genutzte assembly zu jedem Projekt (server und client). Ist notwendig, teilen die gleiche Objekt, nicht nur eine identische Klasse kopieren.
Zu Generieren DLL >
Recht clic in Lösung 'ServerApplication' in der Lösung Explorer - > Add New Project... -> wählen Sie " Class Library
(z.B. name dieses Projekts MySharedHouse)
Benennen Sie das standardmäßige Class1 Haus und füllen Sie es
Recht clic in MySharedHouse und Bauen.
Nun die dll bauen, und wir müssen hinzufügen, dass es im Server-Projekt-und-Client-Projekt.
Recht clic in ServerApplication > Verweis Hinzufügen > Durchsuchen und finden Sie die dll, die für dieses Beispiel
Wiederholen Sie den Vorgang in ClientApplication mit der gleichen dll (gleicher Pfad).
Nun können Sie Instanzen von Haus-Klasse in ServerApplication und ClientApplication als ein einzelnes Objekt, einfaches hinzufügen der Satz "mit MySharedHouse" an der Spitze.
SERVER-CODE
CLIENT-CODE
Wooala! das erste Haus, das für das senden über TCP/IP
InformationsquelleAutor Musculaa