eigenartiges TServerSocket verhalten



  • hola leute

    bin grad dabei etwas code umzuschreiben und bin beim TServerSocket auf ein eigenartiges verhalten gestossen.

    bis jetzt hatte ich das lesen von einem client im TServerSocket immer folgenden aufbau gehabt:
    ReceiveLength auslesen und dann in einem rutsch die anzahl von bytes in einen buffer schreiben. hats noch nie probleme gegeben.
    nachdem in meinem protokoll die ersten 2 bytes die groesse des geschickten bytes angeben hab ich folgendes gemacht:
    erten beiden bytes auslesen. nachgucken wieviel bytes gesammt, davon 2 bytes abziehen und den rest in den buffer schreiben.
    ansich macht er das ja auch so. jedoch wird gleich nach dem ersten OnClientRead das gleiche nochmal aufgerufen.
    ReceiveLength zeigt dann natuerlich 0 bytes an. verstaendlich. aber wieso macht der das ??
    muss man mit ReceiveBuf den gesammten buffer immer auf einen rutsch auslesen ?

    hier noch kurz die funktion die das machen sollte:

    unsigned int RecvStream::LoadFromSocket(TCustomWinSocket *t_socket)
       {
          pos = 0; // brauch ich beim auslesen des buffers, hier unwichtig
          uint32 temp = t_socket->ReceiveLength(); // beim ersten mal stimmts, dann 0
          uint16 t_size = 0;
          t_socket->ReceiveBuf(&t_size, sizeof(uint16));
          t_socket->ReceiveBuf(buffer + sizeof(uint16), t_size - sizeof(uint16));
       }
    

    diese funktion wird von meiner OnClientRead aufgerufen.

    jemand ne idee woran das liegen koennte ?

    Meep Meep


Anmelden zum Antworten