Dateien senden
-
Hallo,
Ich versuche etwas mit Winsock zu machen, ist dieser Versuch richtig oder hab ich bei send() und recv() irgendwas falsch verstanden ?
In der Server Anwendung benutze ich das zum senden :
fh = fopen( szDatei, "rb" ); fseek( fh, 0, SEEK_END ); fsize = ftell(fh); fseek( fh, 0, SEEK_SET ); lpBuf = (char*)malloc( sizeof(char) * fsize ); fread( lpBuf, fsize, 1, fh ); fclose(fh); [...] Anderer Code [...] int sent = 0; int nRet; do { nRet = send( theClient, &lpBuf[sent], fsize, 0 ); sent = sent + nRet; if( sent >= FileHeader.filesize ) break; } while( nRet > 0 ); printf("Bytes Sent : %i\n", sent);
Und in der Client Anwendung dies zum empfangen :
int received = 0; int nRet; do { nRet = recv( hClient, lpRecv, FileHeader.filesize, 0 ); received = received + nRet; if( received >= FileHeader.filesize ) break; } while( nRet > 0 );
FileHeader ist eine struktur mit dem Datei namen und der Datei Grösse die der Client bekommt damit er den Speicher allozieren kann.
Wenn ich z.B. eine Mp3 Datei übertrage geht das auch , nur wenn es große Dateien sind (ein 178 MB grosse Zip) geht es irgendwie nicht. Die Datei ist dann zwar beim Client da, und hat auch die gleiche Grösse aber ich kann sie nicht öffnen ?
der Server gibt "Bytes sent -1" aus , also geht irgendwas bei send() schief..?
-
Bsp.:
"Heute fahr ich 500km mit meinem Auto, also tanke ich 30l. Übermorgen fahr ich 5000km, also tanke ich doch gleich 300l."-> Du kannst also nicht die ganze Datei mit einem Mal verschicken. Musst sie in Blöcke aufteilen!