Hat Winsock (TCP/IP) eine Nachrichtenschlange?
-
Wenn ich mit Winsocks "send" mehrere Nachrichten hintereinander an jemand schicken will, dieser aber etwas langsamer mit dem "reciven" der Befehle ist, werden die dann in einer Nachrichtenschlange gespeichert oder gehen die Verloren. Wenn sie verloren gehen müsste ich ja dann immer erst auf eine "Ja ich habs bekommen" -Nachricht vom Empfänger warten bis ich die nächste empfangen kann. Aber ich dachte eigentlich das TCP/IP das von alleine macht.
Also nochmal die Konkrete Fragen:
1. Hat Winsock (TCP/IP) eine Nachrichrichtenschlange
2. Wenn nein, wie realisiert am besten das senden mehrer Nachrichten hintereinander.
-
Empfangende Nachrichten werden zuerst an einen Buffer "angehangen" den du
mit recv nur immer abholst. Sprich Winsock hat so eine Art
Nachrichtenwarteschlange.
-
TCP garantiert (mit hoher Wahrscheinlichkeit), dass die Daten in der richtigen Reihenfolge ankommen, ohne dass welche verloren gehen oder dazukommen, es sei denn die Verbindung bricht aufgrund massiver Übertragungsprobleme zusammen. Mit Winsock hat das nichts zu tun. Mit C++ übrigens auch nicht.
-
Winsock (TCP/IP) hat so eine Nachrichrichtenschlange.
Allerdings:
TCP-Sockets sind stream-orientiert, d.h. die Information über Pakete, bzw. einzelne send-Aufrufe gibt es auf Seiten des Empfängers nicht mehr.
Du musst dich selbst um das zerlegen der Nachrichten kümmern.
Also z.B. du sendest auf der einen Seite 3 Nachrichten mit folgendem Inhalt:
"123", "456", "789".
Nun kann es sein, dass du auf Empfänger-Seite mit einem recv-Aufruf z.B.
"12345"
bekommst,
dann mit dem nächsten z.B.
"678"
etc.
(je nachdem wieviel gerade im Puffer ist und wieviel du anforderst)
d.h. du musst selbst wissen welche Daten zu welcher Nachricht gehören.
-
ah! Danke für die schnelle Hilfe.