DEUTSCHE VERSION |
|
Links | | | Forums | | | Comments | | | Report news |
Chat | | | Polls | | | Newsticker | | | Archive |
amiga-news.de Forum > Programmierung > Http Post Request | [ - Search - New posts - Register - Login - ] |
-1- 2 3 4 | [ - Post reply - ] |
2008-04-24, 15:22 h MaikG Posts: 5172 User |
Hat jemand eine Beispieldatei wie ein Browser einen POST Request aufbaut? Also Komplett was zum ziel gesendet wird? Wiki gibt nicht viel her und der einzige http Logger der bei mir lief gibt nur ein entschlüsseltes Format aus aber nicht den kompletten POST. [ - Answer - Quote - Direct link - ] |
2008-04-26, 14:27 h Mad_Dog Posts: 1944 User |
@MaikG: Guckst Du hier: http://de.wikipedia.org/wiki/Http#HTTP_POST -- http://www.norman-interactive.com [ - Answer - Quote - Direct link - ] |
2008-04-26, 17:48 h MaikG Posts: 5172 User |
Also ich hab die Anweisungen jetzt per GET übertragen. Aber bei einer Seite hab ich das Problem das statt 15kb nur 7 kb kommen. Hab bei bsd socket an etlichen stellen (risige)delays gesetzt ohne erfolg. evtl. muss ich einen HTTP-X mit der Browser kennung, Referer etc. aufbauen. Informationen dazu sind aber noch viel schwieriger zu finden als zu POST. [ Dieser Beitrag wurde von MaikG am 26.04.2008 um 17:49 Uhr geändert. ] [ - Answer - Quote - Direct link - ] |
2008-04-26, 18:02 h Mad_Dog Posts: 1944 User |
@MaikG: Was willst Du überhaupt machen? Welche Daten möchtest Du mit was wohin übertragen? Bedenke bitte auch, dass man mit GET nicht beliebig viele Parameter übertragen kann. -- http://www.norman-interactive.com [ - Answer - Quote - Direct link - ] |
2008-04-26, 18:08 h Mad_Dog Posts: 1944 User |
Hier noch ein Link zum RFC 2616: http://tools.ietf.org/html/rfc2616 -- http://www.norman-interactive.com [ Dieser Beitrag wurde von Mad_Dog am 26.04.2008 um 18:09 Uhr geändert. ] [ - Answer - Quote - Direct link - ] |
2008-04-26, 18:21 h MaikG Posts: 5172 User |
>Was willst Du überhaupt machen? Welche Daten möchtest Du mit was wohin übertragen? Die spezielle Seite enthält wieviel Trafic ich schon versurft habe(Router). Normal kann die mit AWeb nicht angezeigt werden. Da ist die Seite jedoch vollständig(Quelltext Speichern). Parameter sind die gleichen wie ich verwende per Hand. >Bedenke bitte auch, dass man mit GET nicht beliebig viele Parameter >übertragen kann. In dem falle ist es nur ?next_file=usage/usage_data.html Wesentlich mehr Parameter gingen schon durch. >Hier noch ein Link zum RFC 2616: >http://tools.ietf.org/html/rfc2616 Den hab ich auch schon gelesen, aber es ist da nicht so erklärt als das man es als Anfänger versteht(oder gar nicht). Code hab ich folgenden: code:FUNCTION GetASite&(host$, url$, mywin&, rp&) STATIC i%, fh&, b%, task&, x&, laenge&, MyMemory&, i&, char%, a% STATIC start1&, end1&, proxstart&, TMPL$, maxlaenge&, positionold&, position&, t! STATIC hostent&,addrSize&,addrType&, host$, aPtr&, fd&, a&, res& GetASite&=0 maxlaenge&=190000 MyMemory&=AllocVec(maxlaenge&+1000, MEMF_CLEAR&) IF MyMemory& THEN address%(0) = AF_INET% address%(1) = 80 REM Port 80 == http hostent& = GetHostByName&(SADD(Host$+CHR$(0))) IF hostent&=0& THEN Fehlerausgabe("DNS lookup Fail"):GOTO GPP addrSize& = PEEKL(hostent&+12) addrType& = PEEKL(hostent&+8) IF addrSize&<>4 OR addrType&<>AF_INET% THEN Fehlerausgabe("Unknown address type"):GOTO GPP aPtr&=PEEKL(PEEKL(hostent&+16)) address%(2) = PEEKW(aPtr&) address%(3) = PEEKW(aPtr&+2) fd&=Socket&(PF_INET%, SOCK_STREAM%, 0) IF fd&<>-1 THEN a&=VARPTR(address%(0)) res&=Connect(fd&, a&, 16) IF NOT res& THEN junk&=SendStr&(fd&,"GET "+URL$+" HTTP/1.0"+CHR$(10)+CHR$(10)) t!=TIMER:positionold&=0 WHILE TIMER-t!<10 delay 25 position&=Recv(fd&,MyMemory&,maxlaenge&-1000,MSG_PEEK%) IF position&>0 AND positionold&=position& THEN EXIT WHILE positionold&=position& WEND laenge&=position& ELSE Fehlerausgabe("Couldn't connect"):GOTO GPP END IF x&=CloseSocket&(fd&) ELSE Fehlerausgabe("Failed to create Socket") END IF [ Dieser Beitrag wurde von MaikG am 26.04.2008 um 18:25 Uhr geändert. ] [ - Answer - Quote - Direct link - ] |
2008-04-26, 18:59 h Mad_Dog Posts: 1944 User |
Warum machst Du es Dir denn so schwer? Nimm doch einfach Wget: http://aminet.net/search?query=wget Das kannst Du bei Bedarf auch aus Deinem BASIC-Programm, Shell-Skript oder sonst was aufrufen. -- http://www.norman-interactive.com [ Dieser Beitrag wurde von Mad_Dog am 26.04.2008 um 18:59 Uhr geändert. ] [ - Answer - Quote - Direct link - ] |
2008-04-26, 19:43 h MaikG Posts: 5172 User |
>Warum machst Du es Dir denn so schwer? Manchmal ist es besser etwas zu verstehen als das Problem zu umgehen. Ich finde es auch eine "unsaubere" art so zu programmieren das man zig externe Programme braucht. Z.b. Wget, die exe hat schon 1,6 MB manch einer hat nicht allzuviel Ram. >Nimm doch einfach Wget: http://aminet.net/search?query=wget >Das kannst Du bei Bedarf auch aus Deinem BASIC-Programm, Shell-Skript oder sonst was aufrufen. Probiert hab ichs. Wget ist sehr unsauber Programmiert, fragt nach Assigns die nur einer mit einer gcc Installation hat. Ja dann kommt als ausgabe irgendwas mit unsupported und dann "giving up". [ - Answer - Quote - Direct link - ] |
2008-04-26, 22:02 h Mad_Dog Posts: 1944 User |
Zitat: Dann musst Du Dich eben doch mit dem HTTP Reference Manual beschäftigen. Ist natürlich mühsam sich da reinzuarbeiten und auch nichts für Anfänger. Aber wenn Du alles selbst ausprogrammieren möchtest, dann mußt Du Dich zwangsläufig damit beschäftigen. Anders geht es leider nicht. Ganz allgemein rate ich Dir, Dich mit Deinen Programmierübungen nicht zu überfordern. Fang mit einfachen Sachen an. Erst wenn Du einigermaßen fit bist, kannst Du Dich dann an kompliziertere Sachen wagen. Sich selbst am Anfang schwierige Aufgaben zu stellen und dann frustriert aufgeben und sagen "es geht nicht" bzw. "ich bin zu blöd dafür" halte ich didaktisch nicht gerade sinnvoll. Zitat: Was Du als "unsauber" bezeichnest, ist schlicht und einfach die hirarchische Struktur eines Betriebssystems. Und da dieser Wget-Port ein schlichter GNU/Linux Port ist, setzt es eben die entsprechende Umgebung voraus. Mit etwas Aufwand könnte man sicher auch einen Port machen, der auf eine "reine" AmigaOS Umgebung aufsetzt - wobei dies auch wieder fast ein Paradoxon ist, da ja eigentlich alle Amiga TCP/IP Stacks mehr oder weniger auf bsd basieren... Vielleicht rührt Dein Wunschdenken, daß es für alles und jedes einfache, fertige "aut of the Box" Funktionen gibt auch von Deinen Basic-Erfahrungen her. Ich habe selbst damals auch mit Basic (AMOS) angefangen. Da war ich auch begeistert, daß man mit den "eingebauten Funktionen" schnell tolle Sachen hinbekommen konnte. Allerdings haben diese "eingebauten Basic-Funktionen" auch ihre Grenzen, wie Du ja schon sicher selbst erkannt hast. Und da muß man eben zwangsläufig selbst anfangen, kreativ zu werden. -- http://www.norman-interactive.com [ - Answer - Quote - Direct link - ] |
2008-04-26, 22:04 h thomas Posts: 7718 User |
Zitat: Hast du schon mal probiert, einfach die Datei usage/usage_data.html zu laden, ohne das Script aufzurufen ? Gruß Thomas -- Email: thomas-rapp@web.de Home: thomas-rapp.homepage.t-online.de/ [ - Answer - Quote - Direct link - ] |
2008-04-26, 22:36 h MaikG Posts: 5172 User |
>Dann musst Du Dich eben doch mit dem HTTP Reference Manual >beschäftigen. Ist natürlich mühsam sich da reinzuarbeiten und auch >nichts für Anfänger. Hab ich mir schon durchgelesen. Gibts nicht sowas schönes mit Blöcken, Bildern und Diagrammen was man auch Verstehen kann? Also bei POST sendet man eine Datei, bei GET kann man Parameter in die URL Packen. Aber wo kommt die HTTP_X hin? Da gibt es ja referer, host, forwarded usw. Wenn das auch nur per URL übergeben wird, brauche ich nur ein Beispiel. Ansonsten bleibt ja nur die TCP-Stack umgebung um dies auf andere weise zu übergeben. Wobei mir nicht einleuchtet warum eine halbe Seite kommt, wärend bei einem Parameterfehler sonst immer eine eindeutige Fehlermeldung erscheint. >Ganz allgemein rate ich Dir, Dich mit Deinen Programmierübungen >nicht zu überfordern. Fang mit einfachen Sachen an. Ich Programmiere ja das was ich grade benötige, bissher hab ich es letztendlich immer hinbekommen. >Allerdings haben diese "eingebauten Basic-Funktionen" auch ihre >Grenzen, wie Du ja schon sicher selbst erkannt hast. Und da muß >man eben zwangsläufig selbst anfangen, kreativ zu werden. Von Basic benutze ich eigentlich nur noch die String Funktionen, evtl. noch Datei Funktionen zum Debuggen. Der Rest sind alles Systemfunktionen. >Hast du schon mal probiert, einfach die Datei usage/usage_data.html >zu laden, ohne das Script aufzurufen ? Ja, damit bekomme ich die vollständige Template. Also das ist die Datei die der Router später mit den real Werten ausstattet. Die bringt natürlich nichts. [ Dieser Beitrag wurde von MaikG am 26.04.2008 um 22:37 Uhr geändert. ] [ - Answer - Quote - Direct link - ] |
2008-04-26, 23:52 h MaikG Posts: 5172 User |
Hab erfolgreich den HTTPX Header nachgebildet. Der spass wird einfach dem GET Linienweise angehangen. Leider kommt die Datei immernoch unvollständig rüber. Da muss ein fehler im geposteten Source sein, den wiederum hab ich von Ralfs Threat. [ - Answer - Quote - Direct link - ] |
2008-04-28, 09:57 h Holger Posts: 8116 User |
Zitat:Recv liefert die Anzahl gelesener bytes zurück und keine Position (wie kommst Du darauf, dass es anders sein könnte?). Wenn Du Deinen Lesevorgang abbrichst, sobald Du zweimal hintereinander die gleiche Anzahl bytes liest, brauchst Du Dich auch nicht zu wundern. Du wirst allerdings auch nicht viel Spaß an den gelesenen Daten haben, wenn Du bei jedem Aufruf von Recv die gleiche Puffer-Adresse übergibst. mfg -- Good coders do not comment. What was hard to write should be hard to read too. [ - Answer - Quote - Direct link - ] |
2008-04-28, 11:29 h MaikG Posts: 5172 User |
>Recv liefert die Anzahl gelesener bytes zurück und keine Position >(wie kommst Du darauf, dass es anders sein könnte?). Die Variable stammt noch aus einer Zeit als ich dachte es wäre so. >Wenn Du Deinen Lesevorgang abbrichst, sobald Du zweimal >hintereinander die gleiche Anzahl bytes liest, brauchst Du Dich >auch nicht zu wundern. Deswegen habe ich ein Delay 25 dazwischen. Ich denke es ist nicht sehr warscheinlich das innerhalb einer halben Sekunde nichteinmal ein Byte mehr kommt oder? >Du wirst allerdings auch nicht viel Spaß an den gelesenen Daten >haben, wenn Du bei jedem Aufruf von Recv die gleiche Puffer-Adresse >übergibst. Ich benutze ja die PEEK funktion: 1. Bytes gekommen 50 Bytes, im Puffer = 50 Position=50 von Puffer anfang bis 50 2. Bytes gekommen 90 Bytes, im Puffer = 90 Position=90 von Puffer anfang bis 90 Das mehrfache lesen ist eigentlich nur dafür da, das ende der einkommen Daten herraus zu finden. Dabei wird der Puffer beim 2. mal natürlich nochmal unnötig von 0-50 gefüllt. Oder sehe ich da was komplett falsch? [ Dieser Beitrag wurde von MaikG am 28.04.2008 um 11:30 Uhr geändert. ] [ - Answer - Quote - Direct link - ] |
2008-04-28, 11:39 h Der_Wanderer Posts: 1229 User |
> Ich denke es ist nicht sehr warscheinlich das innerhalb einer > halben Sekunde nichteinmal ein Byte mehr kommt oder Das ist ein echter MaikG! -- Thilo Köhler, Author von: HD-Rec, Sweeper, Samplemanager, ArTKanoid, Monkeyscript, Toadies, AsteroidsTR, TuiTED, PosTED, TKPlayer, AudioConverter, ScreenCam, PerlinFX, MapEdit, TK AB3 Includes und viele mehr... Homepage: http://www.hd-rec.de [ - Answer - Quote - Direct link - ] |
2008-04-28, 12:07 h Holger Posts: 8116 User |
Zitat:Muss man darauf wirklich noch antworten? Zitat:Es ist vollkommen egal, was Du denkst. Solange der Code falsch ist, wird er nicht funktionieren. Selbst wenn Du inzwischen wirklich wissen solltest, wie es richtig sein müsste, was ich bezweifele. Du musst auch den Code korrigieren. Zitat:Was zur Hölle hat das damit zu tun?! Wenn Du beim ersten Mal fünf bytes liest und beim zweiten Mal wieder fünf, dann bricht Deine Code ab. Wenn Du beim ersten Mal fünfzig bytes liest und beim zweiten Mal wieder fünfzig, dann bricht Deine Code ab. Wenn Du beim ersten Mal fünfhundert bytes liest und beim zweiten Mal wieder fünfhundert, dann bricht Deine Code ab. Wenn Du beim ersten Mal fünftausend bytes liest und beim zweiten Mal wieder fünftausend, dann bricht Deine Code ab. Du kannst an dem sinnlosen Delay rumschrauben, so viel Du willst, die Anzahl gelesener bytes mit der Anzahl gelesener bytes aus einem anderen Lesevorgang zu vergleichen, bleibt Schwachsinn. Zitat:Ich befürchte, die bsdsocket-Funktionen interessieren sich nicht im Geringsten für Deine PEEK-Funktion. Wenn Du ihnen beim zweiten Mal dieselbe Speicheradresse übergibst, überschreiben sie die Daten in diesem Speicherbereich. Zitat:Aha. Wenn also der Puffer beim 2.Mal von 0-50 gefüllt wird, dann werden also die ersten 50 bytes im Puffer nicht überschrieben? Oder benutzt Du ein spezielles PEEK, das Restladungen in den RAM-Chips aufspüren kann, um die bytes vom ersten Mal wiederherzustellen? Wie Du das Ende der Datei herausfinden willst, wenn Du die Anzahl gelesener bytes als Position interpretierst, wissentlich sogar, wie Du jetzt andeutest, aber nirgendwo eine korrekte Abbruchbedingung für das Ende der Datei auswertest, gehört zu den Mythen der MaikG-Programmierung. mfg -- Good coders do not comment. What was hard to write should be hard to read too. [ - Answer - Quote - Direct link - ] |
2008-04-28, 13:52 h MaikG Posts: 5172 User |
>Wenn also der Puffer beim 2.Mal von 0-50 gefüllt wird, dann werden >also die ersten 50 bytes im Puffer nicht überschrieben? Nein, so wie ich das verstehe kopiert die bsd-peek Funktion(nicht zu verwechseln mit der Basic Peek Funktion den bsd Internen Puffer. Bereits gelesende Daten bleiben innerhalb dieses Puffers. Zumindest wenn ich die Anleitung richtig interpretiert habe. Damit habe ich auch schonmal (aus dem Internet) Seiten geholt welche wesentlich länger als 15 kb waren. >Wie Du das Ende der Datei herausfinden willst, wenn Du die Anzahl >gelesener bytes als Position interpretierst, wissentlich sogar, >wie Du jetzt andeutest, aber nirgendwo eine korrekte >Abbruchbedingung für das Ende der Datei auswertest, gehört zu den >Mythen der MaikG-Programmierung. Problem ist, Internet ist eine instabiele sachen. Seiten können offline sein, oder kurzzeitig mittendrin gestört. Das hiesse das der Code nicht, oder eine lange Zeit nicht zurück käme. Also z.B. wenn ich auf &h0D0A0D warten würde, was nun zufällig nicht kommt. Ich mach nochmal eine Debug Version fertig und gebe alle "Position" werte und Puffer aus. Okay, scheint so zu sein, wie ich es in erinnerung hatte: POSITON: 17HTTP/1.0 200 OK POSITON: 1085HTTP/1.0 200 OK Content-type: text/html Es könnte vielleicht sein der der bsd eigene puffer sehr klein ist und dadurch das die daten übers lokale Netz sehr schnell kommen dieser überläuft? [ Dieser Beitrag wurde von MaikG am 28.04.2008 um 14:00 Uhr geändert. ] [ - Answer - Quote - Direct link - ] |
2008-04-28, 15:46 h Mad_Dog Posts: 1944 User |
@MaikG: Mike, mach mal langsam... Dein grundlegendes Problem scheint zu sein, daß Du immer den zweiten Schritt vor dem erstem machen möchtest. Wenn Dir das dann nicht gelingt, fängst Du mit wilden Spekulationen an. So wird das nichts. Programmieren ist wie Mahematik. Wenn Du gerade mal die Gundrechenarten kennst kannst Du noch keine Differentialgleichungen lösen - schon garnicht durch Raten. Versuch doch mal, folgende, einfache Aufgabe zu lösen und zeige uns dann das Ergebnis: Schreibe ein Programm, welches eine Textdatei von einem Datenträger einlist und am Bildschirm ausgibt. Wenn Du diese Aufgabe erfolgreich gelöst hast, wirst Du hoffentlich auch folgende Sachen gelernt haben: - Wie man eine Datei öffnet - Wie man das Ende einer Datei und Fehler beim Auslesen erkennt - Welche Klauseln für die Abbruchbedingung einer Schleife sinnvoll sind. Falls Du das nicht hinbekommst, solltest Du nicht wieder mit wilden Spekulationen ala "Speicherung von Daten auf Magnetischen Datenträgern ist eine heikle Sache, wegen dem Erdmagnetfeld, Sonnenstürmen und der gleichen" anfangen. Wenn Du erst einmal gelernt hast, wie man eine (Text-)Datei einliest und am Bildschirm ausgibt, wirst Du hoffentlich selbst erkennen, was an Deinem Code falsch ist und was Dir Holger versucht hat, zu erklären. Als nächstes solltest Du mal Dein Verständnis von "Puffer" hinterfragen. Wenn Du ein Array nimmst und immer wieder ab dem 1. Element anfängst, darin etwas einzutragen, wird der Inhalt eben überschrieben. -- http://www.norman-interactive.com [ - Answer - Quote - Direct link - ] |
2008-04-28, 16:17 h MaikG Posts: 5172 User |
>Wenn Du erst einmal gelernt hast, wie man eine (Text-)Datei einliest >und am Bildschirm ausgibt, wirst Du hoffentlich selbst erkennen, >was an Deinem Code falsch ist und was Dir Holger versucht hat, zu >erklären. Ist heute schon der 1.Mai oder hast du sicherheitshalber schon früher begonnen? Eine blöde Datei einlesen und Ausgeben konnte ich schon als ich 10 Jahre alt war oder so. Also MSG_PEEK% liefert mir in dem Falle grundsätzlich nur 7kb, MSG_WAITALL% ist die einzige Option mit der ich 15kb erhalte. Schlecht daran ist das ich die Abbruchkontrolle verliere. Sprich geht irgendwo beim übertragen etwas schief bleibt das Programm stehen. Das kennt sicherlich noch jeder von YAM, pop3 server mal nicht Verfügbar/bereit und schon kann es passieren das YAM bis zum beenden der Internetsitzung hängt. [ - Answer - Quote - Direct link - ] |
2008-04-28, 16:18 h Holger Posts: 8116 User |
Zitat:Aha. Jetzt wird einiges klarer. Du weist also die Funktion an, Dir die immer gleichen Daten in Deinen Puffer zu schreiben, holst die Daten aber selber nie ab. Und erwartest aufgrund wilder Spekulationen über die zurückgegebene Anzahl von bytes, ob zwischendurch neue Daten angekommen sind. Obwohl Du gar keine neuen Leseanfragen verschickst, sondern Dir immer nur das Ergebnis der alten Anfrage in Deinen Puffer kopieren lässt. Bzw. abbrichst, weil die Anzahl bytes ja gleich geblieben ist. Zitat:Herr im Himmel, wer sagt, dass Du auf &h0D0A0D warten sollst? Wenn Du eine Leseanfrage geschickt hast, sagt Dir der Rückgabewert, ob die Datei zu Ende ist. Ein Rückgabewert von 0 besagt, dass die Datei zu Ende ist. Solange Du den Rückgabewert aber wider besseren Wissens als Position interpretierst, wird das nicht funktionieren. Wenn Du nicht willst, dass der Aufruf bis um Eintreffen von Daten blockiert, musst den den Socket als non-Blocking markieren und den entsprechenden Fehler E_AGAIN (=E_WOULDBLOCK) richtig behandeln. Zitat:Nein. Wenn Du die Daten nicht abholst, sondern immer wieder dieselben Daten anfragst, wirst Du natürlich auch keine neuen bekommen. Selbst wenn der gesamte RAM Deines Rechners inzwischen zu einem socket-Puffer umfunktioniert worden wäre. mfg -- Good coders do not comment. What was hard to write should be hard to read too. [ - Answer - Quote - Direct link - ] |
2008-04-28, 16:23 h Holger Posts: 8116 User |
Zitat: Ja, so wird es sein. Mad_Dog ist schon mal demonstrieren gegangen. Iss aber noch nicht so viel los, deshalb hat er sich noch mal an den Rechner gesetzt und einen guten Ratschlag gegeben. [ - Answer - Quote - Direct link - ] |
2008-04-28, 16:29 h MaikG Posts: 5172 User |
>Aha. >Jetzt wird einiges klarer. Du weist also die Funktion an, Dir die >immer gleichen Daten in Deinen Puffer zu schreiben, holst die Daten >aber selber nie ab. Recv speichert IMMER neue Daten und holt wohlt auch die Daten ab. Siehe Debugausgabe. Noch ein Beispiel: Server: Ha Puffer: Ha Server: Hallo Puffer: Hallo Peek liesst also neue daten, nur die alten werden halt nicht gelöscht. Also die neuen Daten werden den Puffer hinzugefügt. >Herr im Himmel, wer sagt, dass Du auf &h0D0A0D warten sollst? Wenn >Du eine Leseanfrage geschickt hast, sagt Dir der Rückgabewert, >ob die Datei zu Ende ist. >Ein Rückgabewert von 0 besagt, dass die Datei zu Ende ist. PEEK liefert grundsätzlich kein NULL mehr nachdem mindestens ein Byte gelsen wurde. Das geht nur mit anderen Optionen, dann kann die Funktion jedoch wieder hängen bleiben. >Wenn Du nicht willst, dass der Aufruf bis um Eintreffen von Daten >blockiert, musst den den Socket als non-Blocking markieren und >den entsprechenden Fehler E_AGAIN (=E_WOULDBLOCK) richtig behandeln. Weil das mir schwer erscheint hatte ich ja peek verwendet. >Wenn Du die Daten nicht abholst, sondern immer wieder dieselben >Daten anfragst, wirst Du natürlich auch keine neuen bekommen. Es kommen doch neue, guck doch das beispiel. 1.Abfrage: POSITON: 17HTTP/1.0 200 OK 2.Abfrage: POSITON: 1085HTTP/1.0 200 OK Content-type: text/html ... [ Dieser Beitrag wurde von MaikG am 28.04.2008 um 16:31 Uhr geändert. ] [ - Answer - Quote - Direct link - ] |
2008-04-28, 16:37 h MaikG Posts: 5172 User |
>Ja, so wird es sein. Mad_Dog ist schon mal demonstrieren gegangen. Ist da nicht auch Männertag? Das bezog sich auf das saufen. Aber wenns jemanden hilft: Datei mit Open öffnen, länge mittels seek bestimmen, läge mittels Read in den Puffer lesen Datei schliessen. Oder Datei locken, größe mit dem FIB bestimmen, datei vom Lock öffnen usw. [ - Answer - Quote - Direct link - ] |
2008-04-28, 16:50 h Holger Posts: 8116 User |
Zitat:Junge, Du hast ein Problem. Das hast Du selbst geschrieben. Wenn Du damit glücklich bist, dass Deine Software in bestimmten Situationen nicht das tut, was sie soll, dann hör auf, uns damit zu belästigen. Zitat:Ja, dann beschränk Dich darauf, nur "Hallo" zu versenden und zu empfangen, statt Dateien von mehreren kByte. Das wäre Deinem Programmierstil wohl auch angemessen. Zitat:recv liefert eine Zahl zurück. Und das ist =>0<=, wenn die Datei zu Ende ist, nicht NULL und auch keine Position oder irgendwelcher anderer Quatsch. Wenn Du die Daten auch abholst, also verdammt noch mal, vergiss MSG_PEEK Wenn Du die Daten nicht abholst, kann die Datei auch nicht zu Ende sein. Lern endlich programmieren, also die richtige Funktion zu benutzen, statt irgendwelchen totalen Unsinn mit dafür ungeeigneten Funktionen und zusammengereimten falschen Annahmen anzustellen. Zitat:Siehe oben. mfg -- Good coders do not comment. What was hard to write should be hard to read too. [ - Answer - Quote - Direct link - ] |
2008-04-28, 16:51 h Holger Posts: 8116 User |
Zitat:So, und jetzt lerne, wie man es macht, ohne vorher die Größe zu bestimmen. mfg -- Good coders do not comment. What was hard to write should be hard to read too. [ - Answer - Quote - Direct link - ] |
2008-04-28, 17:02 h Mad_Dog Posts: 1944 User |
Zitat: So ist es! Aber ich hatte auch noch keine so richtige Idee, für oder gegen was ich demonstrieren soll. Jetzt ist mir ein Motto eingefallen: "Herr, laß Hirn regnen! -- http://www.norman-interactive.com [ - Answer - Quote - Direct link - ] |
2008-04-28, 17:07 h MaikG Posts: 5172 User |
>Junge, Du hast ein Problem. Das hast Du selbst geschrieben. Ja. >Wenn Du damit glücklich bist, dass Deine Software in bestimmten >Situationen nicht das tut, was sie soll, dann hör auf, uns damit >zu belästigen. Einerseits zwinge ich keinen auf meine fragen zu Antworten, andererseits gibts du mir keine Antwort die in der Praxis funktioniert. >recv liefert eine Zahl zurück. Und das ist =>0<=, wenn die Datei zu >Ende ist, nicht NULL und auch keine Position oder irgendwelcher >anderer Quatsch. PEEK gibt sowas wie den Pufferfüllstand zurück. Und wenn du dich auf den Kopf stellst bei Peek gibt es in der ganzen Debugausgabe, wo mehrere Seiten geladen werden NIEMALS den zustand 0. >Wenn Du die Daten auch abholst, also verdammt noch mal, vergiss >MSG_PEEK Wenn Du die Daten nicht abholst, kann die Datei auch nicht >zu Ende sein. Da MSG_PEEK in meinen Puffer schreibt, gehe ich davon aus das ich die Daten im gewissen sinne abhole. Wenn MSG_PEEK nur eine funktion ist um ausschließlich den Pufferfüllstand zu bestimmen dann sollte die aber auch nicht in meinen Puffer schreiben. Dann wäre die alternative Peek wenn <> 0 dann MSG_OOB% mit der zurückgegebenen zahl im Loop bis Peek=0. Ist natürlich jetzt reine Theorie. >Lern endlich programmieren, also die richtige Funktion zu benutzen, >statt irgendwelchen totalen Unsinn mit dafür ungeeigneten Funktionen >und zusammengereimten falschen Annahmen anzustellen. peek ist eine OPTION von bsdsocked und keine Funktion. >So, und jetzt lerne, wie man es macht, ohne vorher die Größe zu >bestimmen. Entweder du liesst bis Read Null zurückgibt oder du lässt z.B. 100kb lesen, wenn die Datei nur 20kb groß ist gibt es trotzdem kein Problem. [ - Answer - Quote - Direct link - ] |
2008-04-28, 17:13 h Mad_Dog Posts: 1944 User |
Zitat: Zur Übung würde ich auch noch die Varianten Zeichenweise und Zeilenweise lesen epfehlen. Das ist ein ernstgemeinter Ratschlag. Etwas nicht können oder nicht zu wissen, ist keine Schande. Aber Fragen stellen, dann alles besser wissen und beleidigt weiter rumwursteln ist ziemlich kindisch. -- http://www.norman-interactive.com [ - Answer - Quote - Direct link - ] |
2008-04-28, 17:52 h MaikG Posts: 5172 User |
>Zur Übung würde ich auch noch die Varianten Zeichenweise und >Zeilenweise lesen epfehlen. Das ist ein ernstgemeinter Ratschlag. Sorry, aber es bringt jetzt nichts hier weiterhin was reinzuschreiben was ich seit Jahrzehnten blind kann. >Etwas nicht können oder nicht zu wissen, ist keine Schande. Manchmal kommt mir das hier anders vor. >Aber Fragen stellen, dann alles besser wissen und beleidigt weiter >rumwursteln ist ziemlich kindisch. Nicht besserwissen, ich probiere die vorgeschlagenen sachen schon aus, soweit es mir möglich ist. Und besagtes funktioniert nunmal nicht auf besagte weise. Wenn Funktion X nunmal nicht Null liefert, was soll ich hier schreiben? Soll ich lügen, damit sich irgendjemand besser fühlt, ich aber keinen schritt weiter komme? Peek liefert nur Null wenn noch keine Daten angekommen sind, danach incrementiert sich das Ergebniss und wird nie wieder Null, auch wenn seit ewigkeiten keine Daten mehr gekommen sind bzw. die Datei vollständig ist. Erst beim schliessen des Sockets gehts wieder bei Null los. Kann sein das ich die peek Option für was missbrauche für was diese nicht gedacht ist aber Ergebniss ist Ergebniss. [ - Answer - Quote - Direct link - ] |
2008-04-29, 16:51 h Holger Posts: 8116 User |
Zitat:VERDAMMT NOCHMAL, LERN LESEN, LERN DENKEN UND VERSTEHEN. Ich schreib es Dir noch ein letztes Mal, dann kannst Du Deinen Scheiß alleine rumprobieren, schaffen wirst Du es nicht, wenn Du es nicht kapierst: Es funktioniert so nicht, es funktioniert nicht mit MSG_PEEK. Hast Du's jetzt?! Dann kannst Du versuchen, es richtig zu machen: ohne MSG_PEEK. Und dann und auch nur dann, wenn Du die Daten wirklich liest, wird Dir recv ein Dateiende melden. In dem es 0 zurückgibt. Zitat:Hallo? Hirn? Was macht MSG_PEEK? Worin liegt der Unterschied zum normalen Aufruf ohne dieses Flag. Worin liegt der einzige Unterschied? Dass Du die Daten nicht wirklich abholst. Zitat:Hör auf, absurde Theorien aufzustellen. Lerne Programmieren! Zitat:Du bist echt ein Held. Du weißt wirklich, worauf es ankommt. Nur weiter so. -- Good coders do not comment. What was hard to write should be hard to read too. [ - Answer - Quote - Direct link - ] |
-1- 2 3 4 | [ - Post reply - ] |
amiga-news.de Forum > Programmierung > Http Post Request | [ - Search - New posts - Register - Login - ] |
Masthead |
Privacy policy |
Netiquette |
Advertising |
Contact
Copyright © 1998-2024 by amiga-news.de - all rights reserved. |