Fileaustausch Problem



  • int bytes = 0;

    while(bytes < size)
    {
    recvd = 0;
    DWORD wBytes;

    recvd = recv(sockfd, buffer, 1, 0);
    if(recvd == -1)
    continue;

    buffer[recvd] = '\0';

    bytes += recvd;
    WriteFile(hFile, buffer, recvd, &wBytes, NULL);
    }

    So lese ich momentan ein eingehendes File aus und schreibe es in eine Datei!
    Meine Frage ist, ob ich bei recv(...) immer nur 1 byte zur Zeit lesen muss. Wenn ich mehr als 1byte zur Zeit auslese, kann es passieren, dass recv mehr Daten ließt als es soll (sprich das File schon zuende ist)

    Ein Beispiel:

    Das File ist 10bytes groß und recv ließt immer 256bytes auf einmal...wenn nun das 10bytes große File ankommt und danach sofort eine andere Message kommt, die nicht mehr zum File gehört, dann ließt recv die Message gleich mit.

    Muss ich dann immer 1byte zur Zeit nehmen oder kann man das ganz anders machen?
    Wenn das immer 1byte zur Zeit sein MUSS, dann wär meine Frage ob das auf die Performance geht...

    Thx



  • Performance : ja

    aber muss nich sein 🙂

    du hast doch einen Zähler der zählt wieviel Bytes du schon gelesen hast,
    dann merkst du es doch vor dem lesevorgang wenn du zuviel lesen würdest!
    Dann kannste ja nur soviel lesen wie du musst.

    Der Buffer muss ja net dauernd voll sein, kann ja auch ma einen Abned nix trinken LOL

    Beispiel:

    int bytes = 0;
    long Size = FileSize;
    int buffersize = 16*1024 // 16kB

    while(bytes < size)
    {
    //kontroliieren der Größe bzw. Restgröße
    if(Size<buffersize)
    buffersize = size - bytes;

    recvd = 0;
    DWORD wBytes;

    recvd = recv(sockfd, buffer, 1, 0);
    if(recvd == -1)
    continue;

    buffer[recvd] = '\0';

    bytes += recvd;
    WriteFile(hFile, buffer, recvd, &wBytes, NULL);
    }

    War jetzt grad schnell aber ich denke die Änderung ist zu erkennen.

    Viel Glück

    @ junix : so besser ?

    [ Dieser Beitrag wurde am 20.01.2003 um 22:20 Uhr von Gagget editiert. ]


Anmelden zum Antworten