[Winsock]TCP Fileserver Probleme bei großen Dateien



  • Hi,
    der untere Code macht mir Probleme. Es geht um einen TCP Fileserver, es klapt soweit alles, nur nicht beim übertragen großer Dateien(ca. > 50MB). Dann bekomme ich vom recv den Fehler:

    WSAENOBUFS 10055
    No buffer space available.
    An operation on a socket could not be performed because the system lacked sufficient buffer space or because a queue was full.

    Es deutet ja darauf hin das irgendwas mit dem buffer nicht stimmt.
    Die Dateilänge ist die anzahl bytes die vom server eingelesen wurden.

    Jetzt erzeugt eine 50MB Datei ein 52428800 großes array, könnte es daran liegen?
    Beim Server lese ich die Datei aber genau mit der gleichen Methode ein und da gibt es keine Probleme...

    // Ein Ausschnitt des Clients
    
    char *buffer(0);
    buffer = new char [dateilänge];
    
    bytesRecv = recv( hSock, buffer, dateilänge, 0 );
    if(bytesRecv == SOCKET_ERROR) cerr << "Fehler bei Datei_recv(): " << WSAGetLastError() << endl;
    
    Datei.write(buffer, dateilänge);
    cout << "Fertig" << endl;
    
    delete[] buffer;
    


  • übergib eine kleineren puffer



  • Kleiner geht schlecht, ich brauch ja irgendwie die komplette Anzahl an bytes...



  • Nein, du kannst auch nen kleineren Puffer angeben und recv() mehrfach aufrufen.
    recv() musst du laut doku ggf. sowieso mehrfach aufrufen:

    msdn schrieb:

    calling recv will return as much data as is currently available — up to the size of the buffer specified.

    Sprich: Der Rückgabewert von recv() entspricht nicht unbedingt auch der angegebenen Puffer-Länge.


Anmelden zum Antworten