So erhalten Sie alle Daten von NetworkStream

8

Ich versuche alle Daten zu lesen, die im Puffer der Maschine vorhanden sind, die durch TCP/IP verbunden sind, aber ich weiß nicht, warum ich nicht alle Daten bekomme, einige Daten werden verpasst. Hier ist der Code, den ich verwende ..

%Vor%

Bitte sagen Sie mir, was ich vermisse, um alle Daten von der Maschine zu bekommen. Vielen Dank im Voraus ..

    
shubham Hegdey 26.09.2014, 11:34
quelle

6 Antworten

16

Das Problem mit Ihrem Code ist, dass Sie nicht alle Daten erhalten, wenn die Datengröße größer ist als die Puffergröße (1024 Bytes in Ihrem Fall), so dass Sie den Stream innerhalb der Schleife lesen müssen. Dann können Sie Write alle Daten in einem MemoryStream bis zum Ende von NetworkStream .


%Vor%     
GeorgeChond 26.09.2014, 11:59
quelle
4

Dieses Beispiel von MSDN: NetworkStream .DataAvailable zeigt, wie Sie diese Eigenschaft verwenden können:

%Vor%     
dariogriffo 26.09.2014 11:41
quelle
1

Probieren Sie diesen Code:

%Vor%

Hoffentlich hilft das, es sollte verhindern, dass Sie irgendwelche Daten verpassen, die Ihnen gesendet wurden.

    
Paul Weiland 26.09.2014 12:14
quelle
1

Versuchen Sie Folgendes:

%Vor%     
Popa Andrei 13.01.2017 15:35
quelle
0

TCP selbst hat keine Möglichkeit, die Bedingung "Ende der Daten" zu definieren. Dies ist die Verantwortung des Portlets auf Anwendungsebene.

Siehe zum Beispiel HTTP Anfrage Beschreibung:

  

Auf eine Client-Anfrage (bestehend aus der Anfragezeile und nur einem Header-Feld) folgt eine Leerzeile, so dass die Anfrage mit einem doppelten Zeilenumbruch endet

Also, für die Anfrage wird das Ende der Daten durch zwei Zeilenfolgen bestimmt. Und für die Antwort:

  

Content-Type gibt den Internet-Medientyp der Daten an, die von der HTTP-Nachricht übermittelt werden, während Content-Length die Länge in Byte angibt.

Die Größe des Antwort-Inhalts wird im Header vor den Daten angegeben. Es liegt also an Ihnen, die Menge der übertragenen Daten auf einmal zu kodieren - es können nur die ersten 2 oder 4 Bytes am Anfang der Daten sein, die die Gesamtgröße enthalten, um gelesen zu werden, oder komplexere Wege, falls erforderlich.

    
dewaffled 26.09.2014 11:49
quelle
0

für mein Szenario gab die Nachricht selbst die Länge der nachfolgenden Nachricht an. Hier ist der Code

%Vor%     
Asad Durrani 20.11.2016 17:56
quelle