Problem bei Dateiübertragung per Sockets



  • Hallo!

    Ich versuche per Sockets eine Datei zu übertragen, die mehrere MBs groß ist. Dazu verfahre ich beim senden so:

    send(sock,buuuf,strlen(buuuf),0); // Dateilänge übertragen
    	is.seekg (0, std::ios::beg);
    	while( help < length )
    	{
    		is.read(buffer,BUF_SIZ);
    		while(send(sock,buffer,strlen(buffer),0) > 0);
    		is.seekg((help += 4096),std::ios::cur);
    	} 
    	is.close();
    

    Und beim empfangen so:

    std::fstream fs;
    				int retval = 0;
    				for( unsigned long long i = 0; i != length; i+=BUF_SIZ)
    				{
    					fs.open("C:/Users/Username/Desktop/hello.txt",std::ios::binary | std::ios::app);
    					while((retval=recv(clients[i],buf2,BUF_SIZ,0))> 0)
    					fs.write(buf2,retval);
    					//memset(buf2,0,BUF_SIZ);
    					fs.close();
    					//WriteFile(hFile,buf2,BUF_SIZ,0,&ov);
    				}
    

    Met WriteFile() habe ich es auch schon versucht. Ich bitte um Nachsicht, wenn ihr viele Fehler findet und natürlich um korrektur! Bin vollkommener Neuling bei Sockets.

    Danke!



  • #define BUF_SIZ 4096

    ums nicht zu vergessen...



  • Auf jeden fall funktioniert es nicht. Ich bekomme leider immer nur die ersten paar Bytes. Und zwar sehr oft wiederholt...



  • Du solltest Dir auf jeden Fall die Dokumentation zu send() noch einmal durchlesen, dort steht in der Regel immer etwas, dass die Anzahl der gesendeten Bytes nicht mit der Größe des übergebenen Puffers übereinstimmen muss.

    mfg Torsten



  • i+=BUF_SIZ und clients[i] sieht verdächtig aus...



  • HELPVISTAWIN7 schrieb:

    Bin vollkommener Neuling bei Sockets.

    Ja und nicht nur da. Lern erstmal Programmieren bevor du mit komplizierten Dingen wie Sockets anfängst.

    send(sock,buffer,strlen(buffer),0)
    

    Und ein wenig Verständnis für Netzwerkprotokolle bzw. Strings wäre auch nicht schlecht.


Anmelden zum Antworten