Datenverlust mit CSocket
-
Aloha,
ich habe eine kleine Client/Server Anwendung hingefuscht, die im Netzwerk und/oder Netzwerk betrieben wird.
Um uns alle was vorstellen zu können, nennen wir es einen Chatserver, wo aber nicht nur Text ausgetauscht wird, sondern auch Daten.
Mein Server muß bei gewissen Anfragen Daten, die in Listen ( <list> ) vorliegen an den anfragenden Client senden.
In einem Fall genau 10.000 Stück a 484 byte.
Der Server schmeißt diese per Schleife mal folgendermaßen raus
for(int x = 0; x < 10000; x++){ Sock.Send(&kind,4); <-- damit der Client weiß, was da jetzt kommt ist kind ein int Sock.Send(&struktur,sizeof(struktur); <-- die wirklichen Daten zur Verarbeitung }
Die Daten ändern sich natürlich, der Code dient nur als Beispiel.
Es kömmt aber nicht immer alles an.
Und das ist mir ein Rätsel. Mal scheint es perfekt, mal nicht.Empfangen funktioniert beim Client über die ganz normale OnReceive Message vom CSocket.
Irgendwie kommt es mir vor, als ob der Client manchmal überfordert wäre mit der Anzahl an Daten, die da angeschossen kommen.
Ich stelle mir das so vor, daß die Daten vom Server kommend beim Client in eine Schlange gepackt werden, und dann vom Client abgearbeitet, bzw. verarbeitet werden, bis die Schlange leer ist.
Kann es sein, daß irgendwo vielleicht der Puffer der Schlange zu klein ist, so daß die ankommenden Daten quasi verloren gehen, weil kein Platz mehr ist.
Ist die einzigste Idee, die mir so kömmt ?!?!?Hat jemand ähnlich negative Erfahrungen gemacht mit größeren Datenmengen bei CSocket ?
Vor allen Dingen, was wäre die Alternative dazu ?Grüße
Der verzweifelte
BOA
P.S. Ich kann leider erst morgen wieder antworten, ist also kein Desinteresse, wenn ich heute nicht mehr auf mögliche Antworten eingehe.
-
Just a push...
-
ja erzähl uns lieber mal, wie sich dass genau äussert mit deinem socketfehler.
gehen pakete verloren, kommen sie falsch an? ähm ja, und 10.000 nachrichten ist an sich nie gut. wenn du das tcp/ip protokoll kennst weisste ja wie dein und der andere rechner rödeln muss um 10.000 pakete abzuschicken/zu empfangen. vielleicht solltest zuerstmal an dieser struktur arbeiten
Esco
-
Abgesehen von meine vorschreiber:
Wenn innerhalb einer bestimmten Zeit (millisek weiß ich jetzt nicht aus dem Kopf liegt aber so bei 100ms) wieder gesendet wird dann werden die Pakete zusammengefasst.
Also wird mehr gesendet als du eigentlich erwartest.
-
Aloha,
danke für die Antworten.
@Esco
Es gibt keinen Fehler von CSocket.
Wie ich schon schrieb, kommt nicht immer alles an...Was schwebt Dir so vor, bzgl. der Struktur ändern ???
Gib mal nen Stichwort...Denkst Du daran die Strukturen zu etwas großem zusammenzupacken, und dann zu senden in einem Stück meinetwegen ????
@Unix
Ja, aber es ist doch egal ob mehr, bzw. mehrere Strukturen auf einmal gesendet werden, in der Receive nehme ich mir ja bloß, was ich benötige. Ich weiß ja, was ankommt, und wieviel ich aus dem Puffer nehmen muß.
Schlecht wäre es nur, wenn was unsinnges dazugepackt würde, aber woher soll das kommen ?Grüße
BOA
-
Only pushed for Unix-Toms and Esco....