tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
2
ZUGRIFFE
622
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Registriert seit
    Apr 2005
    Beiträge
    181
    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 :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    
            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 :
    1
    
    53 47 00 10 06 49 48 0e 01 0c 01 15

    Allerdings kommt es nur zur folgender Ausgabe:
    Code :
    1
    
    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
     

  2. #2
    Avatar von Shakie
    Shakie Shakie ist offline Mitglied Diamant
    Registriert seit
    May 2004
    Ort
    Europa
    Beiträge
    2.048
    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.
    Geändert von Shakie (03.02.11 um 01:43 Uhr)
     
    hihi = -h²

  3. #3
    Registriert seit
    Apr 2005
    Beiträge
    181
    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
     

Ähnliche Themen

  1. Antworten: 4
    Letzter Beitrag: 19.04.09, 12:21
  2. Nur einen Teil des Names lesen
    Von Power-Poler im Forum Delphi, Kylix, Pascal
    Antworten: 10
    Letzter Beitrag: 16.03.08, 13:44
  3. Nur einen Teil der HP neu laden lassen
    Von calippo im Forum HTML & XHTML
    Antworten: 7
    Letzter Beitrag: 14.07.06, 19:52
  4. Reload einen Teil
    Von dragon90 im Forum Javascript & Ajax
    Antworten: 22
    Letzter Beitrag: 27.06.06, 14:30
  5. CSS nur für einen Teil anwenden
    Von inspire im Forum CSS
    Antworten: 3
    Letzter Beitrag: 24.10.03, 13:43