recv() HTTP Datei vom Header trennen
-
Hi,
ich versuche mich grade in der Socket Programmierung, möchte eine Datei via HTTP Protokol herunterladen. Nur landet diese dann ja leider mit Head bei mir.Nun versuche ich diesen von der Speicherung auszuschliessen:
char buf[1024]; int bytes_sent, bytes_recv; FILE * G_Out; //..... // Antwort des Servers empfangen und auswerten G_Out = fopen("OUT.DAT","bw"); BOOL G_headend; int G_zaehl = 0; int G_hit = 0; G_headend = 0; // Ende des Kopfes / Anfangsposition des Files wird gesucht - Schluesselcharakter ( 13,10,13,10 ) while ((bytes_recv = recv (sock, buf, sizeof(buf), 0)) > 0) { if(!G_headend){ for(G_zaehl=0; G_zaehl<bytes_recv; G_zaehl++){ switch (buf[G_zaehl]){ case 13: if(G_hit == 0) G_hit++; if(G_hit == 2) G_hit++; break; case 10: if(G_hit == 1) G_hit++; if(G_hit == 3) G_hit++; break; default: if(G_hit != 4) G_hit = 0; } if(G_hit == 4){ G_headend = 1; //Kopfende gefunden break; } } } else{ //File wird geschrieben if(G_hit == 4){ G_zaehl++; while(G_zaehl<bytes_recv){ fputc(buf[G_zaehl],G_Out); } G_hit++; } else{ fwrite(buf, 1, bytes_recv, G_Out); } } }
Nur leider stürzt der Code ab
findet Ihr den Fehler ?TIA Copper Hobbit
-
Der Fehler war das +b und einen logikfehler hatte ich auch noch drin
Nur funtioniert mein neuer code leider noch nicht so wirklich habe ein Problem bei der ausgabe von 0 Bytes. Im HEX Editor sieht der Anfang der Datei die ich versuche zu schreiben so aus:
4D 5A 90 00 03 ....
und ich bekomme als Output genau diese 3 ersten Bytes
Hier mein überarbeiteter Code :
// Antwort des Servers empfangen und auswerten G_Out = fopen("OUT.DAT","w"); BOOL G_headend; int G_zaehl = 0; int G_hit = 0; G_headend = 0; // Ende des Kopfes / Anfangsposition des Files wird gesucht - Schluesselcharakter ( 13,10,13,10 ) while ((bytes_recv = recv (sock, buf, sizeof(buf), 0)) > 0) { if(!G_headend){ for(G_zaehl=0; G_zaehl<bytes_recv; G_zaehl++){ switch (buf[G_zaehl]){ case 13: if(G_hit == 0) G_hit++; if(G_hit == 2) G_hit++; break; case 10: if(G_hit == 1) G_hit++; if(G_hit == 3) G_hit++; break; default: if(G_hit != 4) G_hit = 0; } if(G_hit == 4){ G_headend = 1; //Kopfende gefunden break; } } if(G_hit == 4){ G_zaehl++; while(G_zaehl<bytes_recv){ fputc(buf[G_zaehl],G_Out); //Hier werden die 2 ersten Bytes geschrieben } G_hit++; } } else{ //File wird geschrieben fwrite(buf, 1, bytes_recv, G_Out); } }
ich weiss leider nicht welcher Befehl das verursachen kann, plz help
-
fputc(buf[G_zaehl],G_Out); war das problem
Hiermit geht es :
fwrite(buf[G_zaehl], 1, 1, G_Out);