Spülen Sie die TCP-Daten empfangen Puffer?
Ich bin dabei ein Programm mit Winsock zu einen client erstellen und senden von Daten an einen server in Antwort auf die server Antworten mit einer bestimmten Datenblock empfangen, dies ist weiter eine Anzahl von Zeiten.
Das problem ist einige Male meine Daten block 1 wird überlappt mit Daten-block 2 so will ich Spülen meine TCP-Empfangspuffer nach dem 1. vollständige Rezeption.
Ich laut diesem link auch Wie kann ich "flush" TCP-Client-Puffer?, aber ich kann nicht warten, bis die Rezeption tritt
Wie kann ich Spülen Sie die TCP-Daten empfangen Puffer?
Ich mache mein Projekt in visual c++
Mit TCP, sollten die Daten kommen in der richtigen Reihenfolge. Und wenn nicht, warum der Puffer leer ist (wirft den ersten Teil packet2 entfernt)? Oder wollen Sie weglassen, die nächsten x Byte, auch wenn Sie noch nicht hier? Nicht möglich.
InformationsquelleAutor user3395801 | 2014-03-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Der einzige Weg, um "flush" der Empfangspuffer ist zu Lesen. Nach dem ersten Lesen, halten Lesen aus dem socket zu werfen, dass die Daten entfernt, bis es keine Daten mehr zum Lesen. Verwenden
select()
mit einem timeout zu erkennen, wenn der socket noch empfangen von Daten.Wenn Daten "überlappende" dann ist entweder der server nicht senden die Daten korrekt an deren Ende (überlappende
send()
Anrufe), oder Sie nicht Lesen die Daten korrekt auf Ihrer Seite.MSG_DONTWAIT
ist unter Windows nicht verfügbar.InformationsquelleAutor Remy Lebeau