2016-06-03 13 views
0

Ich experimentiere mit Streams in UWP arbeiten, um Daten von einem Rechner zum anderen über das Netzwerk zu senden.Rekonstruieren von Daten über das Netzwerk in UWP-Apps über Streams

Auf dem sendenden Rechner habe ich einen DatagramSocket erstellt und serialisiert die Daten, die ich in Bytes senden möchte und schreibe diese in den Ausgabestrom.

Auf dem empfangenden Rechner erstelle ich einen anderen DatagramSocket und handle das MessageReceived-Ereignis, um die gesendeten Daten zu sammeln.

Dies scheint in dem Sinne zu arbeiten, dass, wenn ich Daten von einem Computer sende, ich es auf dem anderen empfange.

Allerdings sind die Daten, die ich auf dem Sender serialisieren eine Größe von etwa 8150 Bytes, die ich in den Stream schreibe.

am empfangenden Ende, ich bin nur immer etwa 13 Bytes von Daten anstelle der Volllast ich erwartet habe ...

So scheint es, dass ich auf der Empfängerseite verantwortlich bin die vollständigen Daten für die Rekonstruktion Objekt, indem ich darauf warte, dass alle Daten über mehrere Ströme kommen ...

Es scheint jedoch, dass ich Pakete 1: 1 bekomme - das heißt, wenn ich direkt vor dem Senden einen Haltepunkt setze und direkt nach dem Empfang, dass, wenn ich die Daten in den Ausgabestrom schreibe und lösche und es sende, das empfangende Ende dann auslöst und ich bekomme, was Teildaten zu sein scheinen, aber ich bekomme nie etwas anderes.

so, während ich 8150 Bytes von der Sende Maschine senden, das empfangende Ende wird nur ein einzelnes Paket etwa 13 Bytes lang ...

bin ich Pakete zu verlieren? es scheint ein konsistentes 13 Byte zu sein, also vielleicht ist es eine Puffereinstellung, aber das Problem ist, dass ich die 8150 Bytes willkürlich bin; manchmal ist es größer oder kleiner ...

Ich mache das offensichtlich falsch, aber ich bin so neu in der Netzwerkprogrammierung Ich bin nicht wirklich sicher, wo ich anfangen soll das zu reparieren; auf einer hohen Ebene, was ist der richtige Weg, um ein komplettes Speicherobjekt von einer Maschine zu einer anderen zu senden, so dass ich eine genaue Kopie davon auf der Empfängerseite rekonstruieren kann?

Antwort

0

Ok es stellt sich heraus, so dass das Problem war, dass, wenn ich mit dem Ausgangsstrom auf der Sendermaschine schreiben, I war ein regelmäßiger Stream Verwendung und das Array als ein Objekt zu senden:

 using (StreamWriter writer = new StreamWriter(stream)) 
     { 
      writer.Write(output); 
      writer.Flush(); 
     } 

I Ich glaube, das schreibt das Objekt selbst mit ToString(), also was ich tatsächlich in den Stream geschrieben habe, war "byte []" oder was auch immer der Typ war ...

Stattdessen ersetzte ich dies durch einen BinaryWriter und schreibe das Ganze Ausgabe-Array und der komplette Inhalt wird nun am anderen Ende empfangen!

 using (BinaryWriter writer = new BinaryWriter(stream)) 
     { 
      writer.Write(output); 
      writer.Flush(); 
     } 

Ich weiß, das zusammen nicht sehr gut gestellt war, aber ich weiß kaum, was ich hier tue :) noch hoffe, dass ich dies für andere hilfreich sein könnten.