HTTP / FTP Download
-
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 : gccgcc -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> anBitte dringend um Hilfe
-
Hm, includier mal <wininet.h> als erstes... Oder vorher noch windows.h oder so?
-
Rubber schrieb:
wie lädt man eine Datei mittels C aus dem Internet ?
Also ein http/ftp Download.Tipp: Benutze lieber libcurl, als diese Amateurhafte Funktion. libcurl kann übrigens auch ftp (und mehr)
@donnel
BOOL ist glaube ich ein Macro der WinAPI, was man schon an der hässlichen Alles-Groß-Schreibweise erkennt. Normalerweise sind Typen und typedefs in C klein geschrieben.
-
rüdiger schrieb:
Benutze lieber libcurl, als diese Amateurhafte Funktion.
...
BOOL ist glaube ich ein Macro der WinAPI, was man schon an der hässlichen Alles-Groß-Schreibweise erkennt.hey, du bist ja ein echter m$-hasser
:xmas2:
-
ten schrieb:
rüdiger schrieb:
Benutze lieber libcurl, als diese Amateurhafte Funktion.
...
BOOL ist glaube ich ein Macro der WinAPI, was man schon an der hässlichen Alles-Groß-Schreibweise erkennt.hey, du bist ja ein echter m$-hasser
:xmas2:Ich kann dir irgend wie nicht folgen. Das ist doch nur ein normaler Sinn für Ästhetik, das man All-Upper-Case nicht hübsch findet. Egal wer den Code schreibt...