2016-05-27 15 views
0

Ich frage mich, ob es eine Methode oder Eigenschaft gibt, mit der wir sehen können, ob es Bytes gibt, die im Stream einer BinaryReader zu lesen sind (in meinem Fall ist es ein NetworkStream) , da ich eine TCP-Kommunikation durchführe). Ich habe die documentation überprüft und die einzige Methode, die ich gesehen habe, ist PeekChar(), aber es prüft nur, ob es ein nächstes Byte (Zeichen) gibt, so dass im Falle, dass viele Bytes zu lesen sind, eine while Schleife einen Zähler erhöhen kann innezient.BinaryReader C# - Überprüfen, ob noch Bytes übrig sind

In Bezug auf die TCP-Kommunikation ist das Problem, dass das Anwendungsprotokoll hinter dem TCP nicht von mir definiert wurde, und ich versuche nur herauszufinden, wie es funktioniert! Natürlich wird es ein "Längenfeld" geben, das mir einige Hinweise über die zu lesenden Bytes geben wird, aber ich weiß, ich überprüfe nur, wie es funktioniert und diese Frage kam mir in den Sinn.

+0

TCP ist ein Streaming-Protokoll ... nicht sicher, was Sie meinen, aber "Länge" ist ziemlich genau das Gegenteil der Definition von "Streaming". 'BinaryReader' ist nur ein Wrapper um den Protokoll-Stream. – atlaste

+0

Mmm ... Es tut mir leid, aber ich verstehe deinen Standpunkt nicht! – Biurrun

+3

Was möchten Sie tun, wenn gerade keine Bytes verfügbar sind? Das bedeutet nicht, dass es nicht mehr kommt ... –

Antwort

0

BinaryReader wird blockiert, bis es alle erforderlichen Bytes liest. Die einzige Ausnahme ist, wenn das Ende des Streams erkannt wird. NetworkStream ist jedoch ein offener Stream und hat keine Stream-Ende-Bedingung. Sie können also entweder eine Klasse mit grundlegenden Lesern (ReadInt, ReadDouble usw.) erstellen, die peek verwendet, byteweise liest und nicht blockiert; oder verwenden Sie eine andere asynchrone Technologie.