download von binären daten



  • Also ich will via http ne binäre datei downloaden. Socket öffnen und die entsprechenden befehle senden ist kein problem und klapp auch wunderbar. Allerdings weiß ich nicht wie ich jetzt die daten in eine datei krieg. Mein entsprechender codeabschnitt sieht bis jetzt so aus:

    FILE* outfile;
    	outfile = fopen("abc.exe","w");
    	std::string GET="GET "+path+" HTTP/1.1\r\n";
    	std::string HOST="HOST: "+host+"\r\n";
    	send(sock, GET.c_str(), GET.length(), 0);
    	send(sock, HOST.c_str(), HOST.length(), 0);
    	send(sock, "\r\n", 4, 0);
    
    	while(1)
    	{
    		bytes = recv(sock, &buffer, 1, 0);			
    		fprintf(outfile, "%c", buffer); 							
    	}
    	fclose(outfile);
    	close(sock);
    

    Außer das in das file so auch die rückmeldung des servers gespeichert wird klapp das auch ganz gut. Wenn ich es mir nämlich mit einem Hexeditor öffne und den anfang (die rückmeldung des servers) manuel lösche und das mit meinem programm gedownloadete file dann mit dem original vergleiche dann ist es auch identisch bis auf den schluss. Das mit meinem programm gedownloadete file ist ungefähr 2 kb kleiner. woran könnte das liegen?

    ps: wie kann ich überprüfen ob das file fertiggedownloadet ist sodass ich auch irgendwann wieder meine schleife verlassen kann?



  • 1. std::string ist kein ANSI C
    2. Sockets sind kein ANSI C (und auch kein C++, bevor du auf die Idee kommst)
    3. recv mit der Länge 1 aufzurufen ist höchst ineffizient
    4. Variablennamen groß zu schreiben ist höchst hässlich!

    Lies dir mal die HTTP RFC durch, da steht drin, was du implementieren musst und wie du die Antwort des Servers auswertest und weißt wann die Übertragung der Datei zu Ende ist und wie sie abläuft...


Log in to reply