http-request über Sockets
-
Hi ihr da an den Geräten,
Ich lese seid einigen Monaten alles, was ich hier so vor die Nase bekomme, doch jetzt muss ich auch mal eine Frage stellen:
In zusammenarbeit mit einer Chinesischen Schule schreiben wir ein Programm, das eine Maschine ansteuern soll. Wie das funktioniert ist vollkommen klar und kein Problem.
Das kniffelige ist dabei, dass die Steuerungsanweisungen auf den Webservern der Chinesischen Schule liegen sollen. (fragt nicht nach dem Sinn). Das File per Indy-http ab zu holen ist auch kein Problem, jetzt soll das aber über Sockets gemacht werden.
Host, Port und Service ist soweit klar. Acuh Open() funktioniert (oder besser gesagt: es gibt zumindest keinen fehler)
Wie sende ich jetzt aber den http-request ab, und wie speichere ich die ankommenden Daten?
Im Internet finde ich immer nur Beispiele für Delphi oder Java, und das leicht zu verändern und dann zu verwenden klappt nicht.
Ich hoffe, mir kann jemand helfen.
Eure X-Women
-
Hallo
jetzt soll das aber über Sockets gemacht werden.
Warum? Wie glaubst du kommt Indy an die Daten aus dem Internet? Indy ist sozusagen auch nur eine Sammlung von Wrappern um die Windows-Sockets. Es macht keinen Sinn die ausgereiften und umfangreichen Indy-Komponenten durch reinen WinAPI-Zugriff zu ersetzen, nur weil man jetzt "Sockets" haben will.
Wenn du trotzdem umsteigen willst, postest du aber im falschen Forum, denn dann hat das nichts mit dem Builder bzw der VCL zu tun (denn hier wirst du eben nur den Rat zu Indy bekommen), sondern du solltest dich gleich ins WinAPI-Forum verschieben lassen.
bis bald
akari
-
Hi,
Danke für Deine Antwort. Wieso gillt denn TClientSocket nicht als VCL? Aber gut, in diesem Fall bitte verschieben.
Wollen? OMG, natürlich 'will' ich nicht, aber wenn eine höhere Macht sich was in Kopf gesetzt hatt... Die hatten Dort offenbar schonmal ein paar probleme mit Indy in der hinsicht, dass manchmal eine Seite bei ähnlichen Aufgaben nicht abgeholt werden konnte.
Eure x-Women
-
Hallo
nein, TClientSocket ist natürlich auch VCL. nur war davon nichts in deinem ersten Post zu lesen, ich dachte du wolltest direkt die WinAPI-Socket ansprechen.
Wenn du TClientSocket verwenden willst, must du zwingend auf der Gegenseite ein selbstgeschriebenes Programm mit entsprechendem TServerSocket einsetzen. Und dann must du zwischen diesen beiden Teilen ein Protokoll entwickeln, um deine Funktionalität zu erreichen. Das heißt es erfolgt ein Senden und Empfängen von AnsiStrings, die Auswertung dieser und das Antworten ist dann deine Sache. TClientSocket eignet sich aber nicht zum Übertragen von Binärdaten.
Du kannst dir das Chat-Beispiel des Builders anschauen, das arbeitet auch mit TClientSocket
bis bald
akari
-
Hi Akari,
Ups, das war dann ein Missverständniss meinerseits. Dann brauche ich offenbar die reinen Sockets.... (Und dabei war ich doch eigentlich nur für die Steuerung zuständig.)
mfg
X-Women
-
akari schrieb:
Wenn du TClientSocket verwenden willst, must du zwingend auf der Gegenseite ein selbstgeschriebenes Programm mit entsprechendem TServerSocket einsetzen.
Das ist m.E. nicht richtig. Siehe z.B. hier:
http://groups.google.com/group/borland.public.delphi.internet.winsock/browse_thread/thread/fdc39e04e3ca487c/a570dc85bbfd7920?lnk=st&q=tclientsocket+http+group%3Aborland.public.*&rnum=2&hl=de#a570dc85bbfd7920
-
TOLLLL,
Genau so hatte ich mir das eigentlichvorgestellt. Ich habe das Beispiel mal genau nachgebaut, aber im Memo erscheint nix..void __fastcall TForm1::Button1Click(TObject *Sender) { ClientSocket->Active = true; ClientSocket->Socket->SendText("GET / HTTP/1.0 \r\n\r\n"); } //--------------------------------------------------------------------------- void __fastcall TForm1::ClientSocketRead(TObject *Sender, TCustomWinSocket *Socket) { Memo1->Lines->Add(ClientSocket->Socket->ReceiveText()); //ClientSocket->Active = false; } //--------------------------------------------------------------------------- void __fastcall TForm1::Button2Click(TObject *Sender) { ClientSocket->Active = false; }mfg X-women
-
Naja ein wenig mehr musst du schon schreiben und den Server zu sagen was du von ihm willst.
Stichwort: HTTP Protokoll
-
Danke für euren unermütlichen Einsatz.
Ich muss das hier losschiken?:
GET /index.html HTTP/1.1[CRLF]
Host: yahoo.de[CRLF]
Connection: close[CRLF]
Accept-Encoding: gzip[CRLF]
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,/;q=0.5[CRLF]
Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3[CRLF]
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7[CRLF]
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.8.0.6) Gecko/20060728 Firefox/1.5.0.6 Web-Sniffer/1.0.24[CRLF]
Referer: http://web-sniffer.net/