Zu schnell
-
Hallo
ich sende mit diesem Code texte an einen Server:for (int i = 0; i <= 3; i++) { // Textdatei auslesen ReadFile.ReadString(strReadBuffer); // Länge der Nachricht ermitteln iLen = strReadBuffer.GetLength(); // Nachricht senden iSent = m_sConnectSocket.Send(LPCTSTR(strReadBuffer), iLen); }
Doch bei meinem Server kommen die einzelnen Texte nicht einzelnd, sondern als ein Text an(also alle Wörter aneinander gereiht).
Wenn ich aber z.B. ein AfxMessageBox in den Code packe klappt es.
Ich denke das der Code viel zu schnell durchlaufen wird sodass es beim Server aussieht wie eine Textdatei.
Wie kann ich also das ausführen des Codes (durchgehen der Schleife)verlangsamen?
Mfg Kobold
-
Es geht nicht um die Geschwindigkeit des Sendens. Du glaubst, dass zu jedem Send ein Receive gehören sollte, das ist aber nicht so. Die Daten fließen als Strom über den Socket, die Informationen, wo ein Send-Aufruf aufhört und der nächste anfängt, werden gar nicht übermittelt. Wenn du da eine Unterteilung reinbringen willst, dann schick Trennzeichen mit und zerlege die Daten beim Empfänger wieder. Eine Synchronisierung über "Sendepausen" wird dir nicht gelingen, außer du machst sehr große Pausen rein. Aber auch das muss nicht klappen.
Nachtrag: Ist "einzelnd" so was wie "anderst"?
-
Hast du den Server selbst geschrieben? Wenn ja dann musst du den anpassen.
-
Das hört sich gut an mit dem
schick Trennzeichen mit und zerlege die Daten beim Empfänger wieder.
MFK
Doch wie kann ich die Daten beim Server wieder zerlegen?
Mfg Kobold
-
CString hat die Funktionen Left, Right und Mid. Die sind dafür praktisch.
Man kann sich aber auch noch was selber stricken, mir wäre bei sowas ein Explode wie in PHP immer lieb. Das muss man aber selber bauen.
-
Und wie mach ich das mit
CString hat die Funktionen Left, Right und Mid.
?
-
Du suchst in den empfangenen Daten nach deinem Trennzeichen. Alles, was links von dem Trennzeichen steht, ist ein "Wort", das kannst du verarbeiten. Dann machst du mit dem Rest weiter. Wenn du kein Trennzeichen findest, wartest du auf weitere Daten.
-
Und wie mach ich das mit dem finden des Trennzeichens?
-
123Kobold schrieb:
Und wie mach ich das mit dem finden des Trennzeichens?
Weißt du nicht, wie du ein Zeichen in einem String suchst? Dann ist das Ganze vielleicht noch etwas zu hoch für dich.CString::Find.
-
Windows und andere Sammeln Daten welche über den Socket gehen in Packete. Erst dann oder nach einem Timeout werden die Daten gesendet.
Deshlab passiert dies. Pausen müssten hier in einem ms-Bereich liegen. Gibt sogar bei Microsoft einen Namen dafür. Habe ich mir aber nicht gemerkt.
Wenn du dir sicher bist das in deinem Text kein ; oder ähnliches vorkommt dann kannst du dies als Trennzeichen nehmen. Es kann dir aber auch passieren das Ein Wort nicht als ganzes versendet wird etc. DH. es ist nicht so einfach nur Klicki Bunti sowas zu machen.
-
Hallo
bei mir geht das mit dem festlegen eines bestimmten Zeichens nicht wirklich, da die zu sendenden Texte beliebig eingegeben werden können.
Ich denke das mit dem:Pausen müssten hier in einem ms-Bereich liegen
würde besser sein.
Weiss vielleicht irgendjemand mehr darüber. Habe zwar schon in der MSDN geschaut aber leider nichts gefunden.
Mfg Kobold
-
Nein das mit den Pausen ist Quatsch.
-
Wie dann?
Muss ich es mit einem Zeichen machen?
Wenn ja wie genau?
Mfg Kobold
-
Geht bei dir nicht \r\n (Zeilenumbruch) als Trennzeichen?
-
Würde vielleicht gehen.
Mit dem Anfügen der Zeichen vor dem Senden habe ich kein Problem.
Doch wie mache ich das beim Server mit dem unterteilen?
-
wurde schon gesagt
-
Aber mit find() wird ja nur das erste vorkommen der Trennzeichen angegeben. Aber hier werden ja bis zu 12 Wörter aneinander gereiht und zwischen dennen befindet sich jeweils das Trennzeichen. Wenn ich find() benutze, dann erhalte ich zwar nach dem ersten Wort die Trennzeichen aber was ist mit den anderen Trennzeichen.
Oder habe ich da etwas mit find() falsch verstanden.
-
Man kann bei CString::Find angeben ab wo gesucht werden soll.
-
Weisst du wie bzw. kannst du es mir sagen
-
2. Parameter