Frage

Ich möchte ein Objekt serialisiert und über das Netzwerk senden. Ich habe es eingerichtet mit ISerializeable Attribute auf meiner Klasse und BinaryFormatter das Objekt in Bytes zu konvertieren. Ich kann das Objekt und deserialisieren es auf der Empfängerseite senden. Um jedoch zu gewährleisten, dass ich das gesamte Objekt haben, bevor Sie versuchen, es zu rekonstruieren, möchte ich zusammen mit dem Strom der Größe senden. Ich mag die ersten paar Bytes als die Größe einzustellen, zu überprüfen, wenn die empfangenen Daten zumindest diese feste Größe ist, dann kann ich das gelesen und die volle Größe des Objekts erhalten. Dann ist es einfach eine Frage des Wartens, bis meine empfangenen Daten die Größe des Objekts ist + die feste Größe Bytes. Wie kann ich meine Daten in meinem Stream versetzt, so dass ich einen int senden kann die Größe des Objekts, wie die ersten paar Bytes zu speichern, und meine Aufgabe als die übrigen Bytes?

War es hilfreich?

Lösung

Die richtige Antwort lautet:

SocketPacket socketData = (SocketPacket)asyn.AsyncState;
socketData.currentSocket.EndReceive(asyn);
byte[] data = socketData.dataBuffer;   

Ist nicht die richtige Art und Weise von einem SocketPacket

lesen

Andere Tipps

MemoryStream resultStream = new MemoryStream();
resultStream.Write(BitConverter.GetBytes(objectStream.Length));
resultStream.Write(objectStream.ToArray());

// send the resultStream

Kann man nur serialize zu einem MemoryStream, dann einmal das getan add ist die .Length vom MemoryStream, gefolgt von den Daten (Verwendung GetBuffer() und kopiert .Length aus der Array-Bytes). Rückwärts an dem Empfänger; Lesen die Länge (typischerweise 4 Byte), dann in eine MemoeryStream dass viel Datenstapel; Zurückspulen des MemoryStream (Position=0) und deserialisieren. Natürlich müssen Sie endianness usw. zustimmen.

(siehe, und ich habe auch nicht erwähnt, Schu ... oh, die andere Sache)

Was genau wollen Sie verhindern? TCP bereits verfügt über eine integrierte in Konsistenz und Zuverlässigkeit überprüft.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top