HTTP / FTP Download



  • Nur eine Vermutung:

    if(strstr(url, "http://") == url) 
      url += 7;
    

    -> damit wird der Zeiger 'url' über das "http://" drübergeschoben



  • if(strstr(url, "http://") == url)
    

    überprüft, ob http:// der Anfang ist; wenn ja, erhöht der einfach den Zeiger um 7, damit http:// nicht mehr der Anfang ist.

    http://www.test.de

    ergibt damit

    www.test.de

    €dit: Oh und MAXLEN ist bei mir 512. Nur so als Info.



  • ok, hab ich begriffen.

    aber was liefert die funktion split_string bei dir zurück ?

    int argc;
    
    buffer[pos] = '\0';
    
    argc = split_string(buffer, argv);
    

    und wofür lässt du es dir zurückliefern wenn später keine überprüfung auf argc stattfindet ?



  • argc ist die Anzahl der Argumente.
    argv ist ein Vektor von Pointern auf die Argumente, wie bei int main(...) auch.
    Und die FUnktion splittet einfach den String in einzelne Wörter.

    "argc =" kannst du natürlich weglassen, wenn du nirgendwo siehst, dass ich es gebraucht habe. Ich habe es damals einfach vorsorglich eingebaut, falls ich es brauchen würde und habe es halt nie entfernt.



  • Ok, super. Funzt alles. netter Code.

    Dann muss ich mich ja nur nochmal für FTP umsehen. Wegen User/Pw anmeldung.



  • feigling, die funktion gehoert aufgeteilt. wir sind hier nicht in basic, wo man keine funktionen benutzen will.



  • Single byte send()s and recv()s. Festering in a pool of lameness.

    Reason: Couple one-byte sends with Nagle disabled, and you have at best a 40:1 overhead-to-data ratio. Can you say wasted bandwidth? I thought you could.

    As for one-byte receives, think of the effort and inefficiency involved with trying to drink a Guinness Stout through a hypodermic needle. That's about how your application would feel "drinking" data one-byte at a time.

    Alternative: Consider Postel's RFC 793 words to live by: "Be conservative in what you do, be liberal in what you accept from others." In other words, send modest amounts, and receive as much as possible.



  • c.rackwitz schrieb:

    feigling, die funktion gehoert aufgeteilt. wir sind hier nicht in basic, wo man keine funktionen benutzen will.

    Dann mach das doch 🙄

    Das hatte schon einen Grund, warum ich alles in eine Funktion gepackt habe. Warum soll ich alles in 5 verschiedene Funktionen packen, wenn es eine kompakte Funktion werden sollte.

    winsock lame list schrieb:

    Single byte send()s and recv()s. Festering in a pool of lameness.
    ...

    Auch hier: Dann ändere es doch.

    Bei der Funktion ging es hauptsächlich darum, dass sie schnell fertig wird. Nicht, dass sie gut aussieht, nicht, dass sie gut in Funktionen aufgeteilt ist, nicht, dass sie schnell arbeitet bzw wenig Ressourcen verbraucht.

    Ich finde es immer lustig, wenn sich hier Leute mit guten Tipps aufspielen und dann selber keinen besseren Code posten.
    Wenn ihr es besser könnt oder Zeit habt, da nen vernünftigen Code zu zuschreiben, macht es. Ich hatte es damals nicht.

    Ich habe den Code auch nur gepostet, damit Rubber nen Anhaltspunkt hat, wo er anfangen muss. Wenn er die Funktion übernehmen will, ok. Wenn nicht, kann er sich die Teilstücke meiner Funktion in seine eigenen Funktionen pasten und nen schönen Code draus basteln.



  • Muss mal eben feigling verteidigen 🙂

    Der Code ist gut und tut seine Atbeit ohne wiederrede.
    Außerdem ging es um eine schnelle Hilfe und wenn dann jemand aus seinen sourcen nen Code postet dann find ich das super gut, erspart ne Menge Arbeit.

    Wenn jemand nen besseren hat dann postet ihn doch statt feigling an zumachen.

    "Der Worte sind genug gewechselt, lasst Taten folgen !"

    Nur um mal einen Philisophen zu zitieren.

    Dickes Thx Feigling 👍



  • Bevor ich es vergesse,

    hat mir jemand ein Beispiel wie man nen ftp download mit USER/PW macht ?

    Thx



  • c.rackwitz schrieb:

    feigling, die funktion gehoert aufgeteilt. wir sind hier nicht in basic, wo man keine funktionen benutzen will.

    Lieber c.rackwitz,

    Er postet wenigstens Code und hilft ihm, von daher finde ich es völlig in Ordnung. Schliesslich fragt er nicht nach Hilfe oder so bzw. er hatte seine Gründe dafür. Was denkst du darüber? Vielleicht habe ich es falsch interpretiert.

    Ich hoffe, man kann darüber reden ohne dass dies jetzt in einem Coder VS Coder ausartet.

    gruss



  • Rubber schrieb:

    Bevor ich es vergesse,

    hat mir jemand ein Beispiel wie man nen ftp download mit USER/PW macht ?

    Thx

    Das dürfte etwas schwieriger sein, da FTP eine Daten- und eine Steuerleitung benutzt, also musst du glaube ich 2 Sockets offen haben.

    @ dieses Gerede um die Meckerei um den Code ist doch eh quatsch.
    c.rackwitzs Aussage widerspricht sich schon selber...
    "Ich benutze keine Funktionen, aber ich soll meine Funktion in Funktionen aufteilen."

    Wie soll ich meine Funktion in Funktionen aufteilen, wenn ich garkeine Funktion(en) benutze 😕 😉

    Egal, lassen wir das.

    Jedenfalls dürfte das ganze für FTP sehr viel komplizierter werden.



  • feiglich hätte am besten sofort dazu schreiben sollen das der Code noch nicht so optimal ist, dann hätte bestimmt niemand gemeckert.

    Ich würde die WinInet Library nehmen, wenns nur für Windows sein muss oder libcurl, die läuft auf vielen Betriebssystemen und kann HTTP, FTP und noch mehr.



  • Ist Wininet nicht nur für C++ gedacht ?

    BOOL InternetCheckConnection(
      LPCTSTR lpszUrl,
      DWORD dwFlags,
      DWORD dwReserved
    );
    

    BOOL gibts doch in C garnicht. Oder irre ich mich ?



  • Hab mal folgendes probiert:

    #include <stdio.h>
    #include <Wininet.h>
    
    int main()
    {
    	BOOL IsOnline = FALSE;
    
    	char web_addresse[] = "http://www.web.de";
    	IsOnline = InternetCheckConnection( web_addresse, 0, 0 );
    
    	if ( IsOnline == TRUE )
    	{
    		printf("Internetverbindung besteht !!\n");
    	}
    	else
    	{
    		printf("Es besteht keine Internetverbindung !! %d\n",GetLastError());
    	}
    }
    

    OS : cygwin
    Compiler : gcc

    gcc -o check check.c -lwininet

    Lässt sich ohne Probs übersetzen ? Gibts also doch BOOL in C ?
    Allerdings gibt sagt das fertige Prog dass kein Inetverbindung besteht, bin aber Online.



  • ja bool gibts in C99

    _Bool
    //oder mit
    <stdbool.h>
    //auch:
    bool
    

    ist es so schwer die neuen features von einem 7 jahre alten standard zu kennen?
    ich meine bool oder vl-arrays sind ja eigentlich ganz nützlich 🕶



  • ok, kannst du mir dann sagen warum das meint es gäbe kein Inet ?

    #include <stdio.h>
    #include <Wininet.h>
    #include <stdbool.h>
    
    int main()
    {
    	bool IsOnline = FALSE;
    
    	char web_addresse[] = "http://www.web.de";
    	IsOnline = InternetCheckConnection( web_addresse, 0, 0 );
    
    	if ( IsOnline == TRUE )
    	{
    		printf("Internetverbindung besteht !!\n");
    	}
    	else
    	{
    		printf("Es besteht keine Internetverbindung !! %d\n",GetLastError());
    	}
    
    }
    


  • hab grad kein windows, wird also schwierig 😉

    aber ich kann dir sagen, dass die makros klein geschrieben werden:

    true  // !0 TRUE
    false  // 0  FALSE
    


  • ich habe folgenden Quelltext:

    #include<stdio.h>
    #include<Wininet.h>
    
    void main()
    {
    
    	IsOnline = 0;
    
    	char web_addresse[] = http://www.web.de":
    	IsOnline = InternetCheckConnection( web_addresse, 0, 0);
    
    	if ( IsOnline != 0)
    	{
    		printf("Internetverbindung besteht !!\n");
    
    	}
    	else
    	{
    		printf("Es besteht keine Internetverbindung !! %d\n", GetLastError());
    	}
    }
    

    also im Grund so wie hier geschrieben... ich erhalte jedoch folgende Fehlermeldung:
    [quot]
    d:\microsoft visual studio\vc98\include\wininet.h(2) : warning C4182: Die #include-Verschachtelungsebene ist 363 tief; Endlosschleife moeglich
    d:\microsoft visual studio\vc98\include\wininet.h(2) : fatal error C1076: Compiler-Beschraenkung: Interne Heap-Grenze erreicht; Verwenden Sie /Zm, um eine hoehere Grenze anzugeben
    Fehler beim Ausführen von cl.exe.
    [/quot]
    Beide Fehler zeit VC++ 6 auf das #include<Wininet.h> an

    Bitte dringend um Hilfe



  • Hm, includier mal <wininet.h> als erstes... Oder vorher noch windows.h oder so?


Anmelden zum Antworten