winsock Nachricht verschwindet
-
Hallo
Wenn ich 2 Nachrichten direkt hintereinander vom (TCP-)Server aus sende, kommt die zweite nicht beim Client an. Füge ich allerdings beispielsweise ein Sleep(100) dazwischen ein, funktioniert es.
Da ich von sockets wenig Ahnung habe, hoffe ich, dass das nur ein Anfängerfehler ist und es dafür einen sinnvollen Grund gibt. So richtig wohl fühle ich mich mit diesem Sleep(100) nicht, da es auf anderen Rechnern eventuell nicht ausreicht. Ich würde schon gern rausfinden was da los ist und es beheben.
An was könnte das liegen? Client und Server laufen übrigens auf einem Rechner, große Latenzzeiten können es also nicht sein.
-
Zeig doch mal, wie du die Nachrichten empfängst, vielleicht ist da was faul

Achso, an was es liegen könnte.. Hm, vielleicht kommen beide Nachrichten in einem Päckchen an und du "überliest" die zweite ausversehen. Oder aber, mein Tipp, dein recv bringt dir ein SOCKET_ERROR mit WSA-Errorcode auf WSAEWOULDBLOCK.
-
Dieser Thread wurde von Moderator/in rüdiger aus dem Forum Rund um die Programmierung in das Forum WinAPI verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
ich weiß wo dein problem liegt, hatte mal genau das selbe :
Ich nehme an du empfängst die daten mit einem recv() und dann eine gewisse größe... jedoch empfängt recv nur das was grade auch da ist, aber wenn du daten übers inet z.b. verschickst dauert das numal eine weile.... deshabl würde ich solange recv() aufrufen (rückgabewert von recv prüfen um zu sehen wieviel tatsächlich empfangen wurde) bis deine gewünschte byteanzahl auch tatsächlich empfangen wurde
mir hat das sehr geholfen...EIDT: hab grade gesehen dass du die daten auf dem selben pc verschickst also dürfte es nicht daran liegen, dass die pakete noch unterwegs sind -.- aber schick einfach mal deine recv routine

Gruß Chris
-
Danke für Eure Antworten. Es war tatsächlich der befürchtete Anfängerfehler.
Ich hatte erwartet dass ich die Pakete wieder genauso bekomme wie ich sie losschicke. Zwei direkt nacheinander abgeschickte Nachrichten werden aber wohl zu einer zusammengebündelt.
Ja, RTFM, ich weiß

Ich habe jetzt eine std::queue eingebaut, die solange gefüllt wird bis ein vollständiger Nachrichtenblock da ist. Funktioniert prima.