Für mein aktuelles Projekt muss ich XML-Daten über eine tcp/ip-Socket-Verbindung anfordern. Hierfür verwende ich die Klasse TcpClient:
Dim client As New TcpClient()
client.Connect(server, port)
Dim stream As NetworkStream = client.GetStream()
stream.Write(request)
stream.Read(buffer, 0, buffer.length)
// Output buffer and return results...
Bei kleinen Antworten funktioniert das wunderbar. Wenn ich jedoch anfange, größere Datenblöcke zu empfangen, scheint es, dass die Daten in Bursts über die Socket-Verbindung geschoben werden. Wenn dies geschieht, liest der stream.Read-Aufruf nur den ersten Burst, und so verpasse ich den Rest der Antwort.
Wie gehe ich am besten mit diesem Problem um? Zunächst habe ich versucht, nur Schleife, bis ich ein gültiges XML-Dokument hatte, aber ich fand, dass zwischen stream.Read Aufrufe der zugrunde liegende Stream manchmal heruntergefahren werden würde und ich würde auf den letzten Teil der Daten verpassen.