Frage zum Fortune Client example



  • Was ist der Sinn davon, dass in der Methode readfortune diese Vergleiche gemacht werden:

    if (blockSize == 0) {
            if (tcpSocket->bytesAvailable() < (int)sizeof(quint16))
                return;
    
    if (tcpSocket->bytesAvailable() < blockSize)
            return;
    

    Abgesehen davon, dass ich den Sinn der Vergleiche nicht verstehe sind das doch Abbruchbedingungen? Sobald return ausgeführt wird wird die Methode doch beendet? Im Prinzip kommt das, was per tcpSocket empfangen wird ja am Ende in blockSize. Und dann müsste die Abbruchbedingung doch überprüfen ob es mehr empfängt als in blockSize reinpasst, nicht ob es weniger empfängt?



  • *push*



  • enoemosomeone schrieb:

    Was ist der Sinn davon, dass in der Methode readfortune diese Vergleiche gemacht werden:

    if (blockSize == 0) {
            if (tcpSocket->bytesAvailable() < (int)sizeof(quint16))
                return;
    
    if (tcpSocket->bytesAvailable() < blockSize)
            return;
    

    Abgesehen davon, dass ich den Sinn der Vergleiche nicht verstehe sind das doch Abbruchbedingungen? Sobald return ausgeführt wird wird die Methode doch beendet? Im Prinzip kommt das, was per tcpSocket empfangen wird ja am Ende in blockSize. Und dann müsste die Abbruchbedingung doch überprüfen ob es mehr empfängt als in blockSize reinpasst, nicht ob es weniger empfängt?

    Also die Nachricht wird so versendet: blockSize + Text. Dabei ist blockSize ein 16 Bit breiter unsigned int und gibt an, wie lange der nachfolgende Text ist. Der allererste Vergleich prüft nun, ob blockSize == 0 ist. Das ist immer dann der Fall, wenn eine neue Nachricht empfangen wird und bedeutet, dass erstmal die Länge des Textes ermittelt werden muss. Der nächste Vergleich prüft, ob das, was bisher angekommen ist, überhaupt 2 Bytes sind, also ob die Information blockSize vollständig ist. Falls nicht, dann kehrt die Funktion zurück und schaut ob beim nächsten Aufruf genug angekommen ist.
    Der letzte Vergleich wartet schließlich so lange, bis der komplette Text, der blockSize Zeichen lang ist, angekommen ist, bevor er damit beginnt ihn auszuwerten.

    PS: Nächstes mal bitte den passenden Link dazu angeben oder überhaupt mal sagen worum es geht 😉

    Qt Fortune Client Example


Anmelden zum Antworten