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);


Anmelden zum Antworten