CASyncSocket - Große Daten versenden



  • Verschicke relativ große Datenmengen (z.B. Screenshots) von Computer zu Computer (Wer Server / Client ist spielt keine Rolle).

    Das Problem ist dass Der Empfänger nicht rechtzeitig die Daten empfängt.

    mit CAsyncSocket::IOCtl(FIONREAD, ...) frage ich ab wieviele Daten noch ausgelesen werden können. Das wiederhole ich solange bis mir die Funktion 0 liefert.
    Jetzt bekomme ich irgendwann (mitten in der Übertragung) 0 zurük und höre auf zu empfangen, obwohl noch nicht alles ausgelesen ist.

    Zum testen habe ich vor jeden IOCtl()-Aufruf Sleep(10) gesetzt. Dann werden die Daten korrekt empfangen. Es liegt also an der Geschwindigkeit.

    Gibt es da eine elegante Lösung des Problems?

    Gruß,
    Marco



  • Nein, es liegt daran dass du die Socket API nicht verstehst.
    Du musst unabhängig von der Socket API entscheiden können wann das "Datenpaket" sozusagen "zu ende" ist.
    Die einfachste Möglichkeit ist vorher die Länge zu schicken.
    Dann empfängst du die Länge, und danach eben N Byte Daten.

    Wenn während des Empfangens der N Byte irgendwann mal "null Bytes verfügbar" sind, heisst das nur, dass die Übertragung nicht schnell genug war. In dem Fall muss der Empfangende Teil halt warten. Das ist auch der Normalzustand, da ein Programm eigentlich immer Daten schneller entgegennehmen kann, als sie übers Netzwerk übertragen werden können.

    Einzig beim Testen ohne Netzwerk (=beide Programme laufen auf dem selben PC) wird es manchmal so aussehen als ob die Daten "unmittelbar" übertragen werden.



  • Ah, das ist gut!
    Sowas in der Richtung hab ich mir gedacht.

    Danke 😉


Log in to reply