[VB] TCP Client liest nur einen Teil ein

Domsi

Erfahrenes Mitglied
Hallo,

ich möchte die Daten eines Netzwerkgeräts mittels TCP abfragen. Soweit funktioniert es prinzipiell ja, das Problem ist nur dass die Daten nur teilweise eingelesen werden.

Mein Code: (Verbindung ist erfolgreich aufgebaut.

Code:
        Dim i As Integer
        ' Buffer for reading data
        Dim bytes(1) As Byte
        Dim data_hex As String

        data_hex = ""

        ' Loop to receive all the data sent by the client.
        i = stream.Read(bytes, 0, bytes.Length)
        While (i <> 0)
            For x As Integer = 0 To bytes.Length - 1
                data_hex &= bytes(x).ToString("X2").ToUpper & " "
            Next

            If Not stream.DataAvailable Then
                Exit While
            End If
            i = stream.Read(bytes, 0, bytes.Length)

        End While

        Return data_hex

stream ist hier = Client.GetStream


Es werden hier direkt die eingelesenen Bytes in einen Hex-Code umgewandelt (Das ist für die Darstellung der Daten Notwendig).

Das Problem ist nun, wenn ich die Funktion aufrufe, dass eigentlich folgende Ausgabe erscheinen sollte:
Code:
53 47 00 10 06 49 48 0e 01 0c 01 15

Allerdings kommt es nur zur folgender Ausgabe:
Code:
53 47 00 10

Den TCP-Verkehr habe ich mittels "wireShark" geprüft und es wird der gesamte (erwünschte) Stream übertragen, allerdings wird eben nur ein Teil eingelesen.

Wenn ich im DEBUG-Modus teste und den Code wirklich Schritt für Schritt durchgehe, dann wird der gesamte Stream eingelesen.
Wenn ich zum Beispiel "byte(50)" deklariere, dann wird auch alles eingelesen, aber dann sind halt 48 mal "00" in der Ausgabe enthalten.

Wo liegt denn hier mein Fehler?

Mfg,
Domsi
 
Wahrscheinlich liefert "stream.DataAvailable" false, weil jetzt im Augenblick noch keine weiteren Daten vorhanden sind, aber vielleicht 50 Millisekunden später. Ist aber nur so geraten.
 
Zuletzt bearbeitet:
Ahhh ok das macht Sinn was du sagst :)

Wenn ich nämlich auf Not stream.DataAvailable prüfe und dann z.b. 50ms sleep einstelle, dann läuft die schleife solange bis die Daten da sind.

So bekomme ich jetzt mal alle Daten.

Danke!

Mfg,
Domsi
 

Neue Beiträge

Zurück