CSocket(send, receive) - Sichergehen, dass alle Daten gesendet/empfangen wurden

thekiller

Viceinator
Hallo,

ich hab im gerade ein kleines Problem beim empfangen von Daten. Und zwar, dass die Menge der Daten die ich sende(Binärdaten) zwar stimmt, aber diese Datenpackete irgendwie durcheinandergewürfelt sein müssen. Ich habe dass anhand eines Bildes feststellen können, was ich gesendet habe. Es hat beim Empfänger die richtige größe aber Das Bild ist total fragmentiert . Das tritt nur auf, wenn ich es über Internet sende. Lokal Funktioniert es ohne Probleme.
Dass lässt mich darauf schließen, dass meine Datenpakete(die ich in einer Schleife sende), nicht schnell genug gesendet werden.
Ich habe mal irgendwo im Internet ein Beispiel gesehen wo dass umgangen wurde. Finds aber nicht mehr wieder.
Könnt Ihr mir da weiterhelfen?

LG Manuel
 

deepthroat

Erfahrenes Mitglied
Hi.

Zeig deinen Code. Mit Stream Sockets werden die Daten in der Reihenfolge übertragen und empfangen in der sie gesendet wurden.

Gruß
 

thekiller

Viceinator
Das wird wohl erstmal nix mit Source. Mein Programm ist schon etwas komplexer. Ich müsste den Source extrem beschneiden und dass Ganze gleich 2 mal(Server und Client), sonst sieht da keiner durch außer ich.
Ich bin grad auch noch am gucken überall und glaube dass OnSend und OnReceive vielleicht meine Lösung sein könnte, aber ich find nirgends ne gute Erklärung zu dem Prinzip dahinter.
Im Grunde geht es mir ja darum, dass Mein programm blockiert werden soll, solange gesendet/empfangen wird. Also erst dann weitergemacht wird, wenn das komplette Datenpaket gesendet und empfangen wurde.
 

deepthroat

Erfahrenes Mitglied
Das wird wohl erstmal nix mit Source. Mein Programm ist schon etwas komplexer. Ich müsste den Source extrem beschneiden und dass Ganze gleich 2 mal(Server und Client), sonst sieht da keiner durch außer ich.
Das ist schlecht.
Ich bin grad auch noch am gucken überall und glaube dass OnSend und OnReceive vielleicht meine Lösung sein könnte, aber ich find nirgends ne gute Erklärung zu dem Prinzip dahinter.
Im Grunde geht es mir ja darum, dass Mein programm blockiert werden soll, solange gesendet/empfangen wird. Also erst dann weitergemacht wird, wenn das komplette Datenpaket gesendet und empfangen wurde.
Receive, Send, ReceiveFrom, SendTo, and Accept sind blockierende Funktionen.

Gruß
 
Das wird wohl erstmal nix mit Source. Mein Programm ist schon etwas komplexer. Ich müsste den Source extrem beschneiden und dass Ganze gleich 2 mal(Server und Client), sonst sieht da keiner durch außer ich.
Nja, dein Send/Receive sollte nicht die welt sein, sonst hast du was falsch gemacht. KISS :)

Ich bin grad auch noch am gucken überall und glaube dass OnSend und OnReceive vielleicht meine Lösung sein könnte, aber ich find nirgends ne gute Erklärung zu dem Prinzip dahinter.
Im Grunde geht es mir ja darum, dass Mein programm blockiert werden soll, solange gesendet/empfangen wird. Also erst dann weitergemacht wird, wenn das komplette Datenpaket gesendet und empfangen wurde.
OnSend und OnReceive sind sog. Callbacks, in die du laufen kannst (falls entsprechend aktiviert) nachdem etwas versendet werden kann(OnSend) oder nachdem etwas empfangen wurde/empfangen werden kann (im empfangspuffer liegt) (OnReceive).

Hierzu:
OnSend
OnReceive

- btw. beide kommen aus CAsyncSocket (non-blocking).

Gruß Dave