GET Anfrage mit TCLientSocket?
-
Hey @all,
und zwar habe ich vom BCB nur die Personal version, und da habe ich ja TCLientSocket dabei, meine Frage ist nun ob ich mit diesem TClientSocket zum Beispiel die Datei "http://www.google.de/index.html" herunterladen kann, und diese dann in eine Datei speichern kann?
Wenn ja, kann mich bitte mal jemand auf den rechten weg weisen.
Vielen Dank im Voraus
Lg freeze
-
Na klar geht das. Du sendest ein GET und liest die Antwort des Servers aus.
Arbeite das Chat-Beispiel im \examples\internet-Verzeichnis des BCB durch und mach dich so mit TClientSocket vertraut. Wenn du dann soweit bist, einen Ansatz für dein GET-Problem zu entwerfen, dabei aber auf Schwierigkweiten stösst, dann helfen wir dir gern bei der konkreten Fehlersuche.
Alternativ kannst du auch einfach eine HTTP-Komponente wie die des Indy-Paketes verwenden.
-
Ja also das erste Problem hätte ich nämlich schon, und zwar schreibt mir windows immer eine Fehelrmeldung mit "ASync Lookup", danach hatte ich den Code für das OnError Event implementiert den ich hier gefunden habe, nun schreibt er mir :"Unspecified ClientSocket error."
Hier die Implementierung
void __fastcall TForm1::ClientSocket1Error(TObject *Sender, TCustomWinSocket *Socket, TErrorEvent ErrorEvent, int &ErrorCode) { // analyse ErrorEvent String Msg = "Unspecified ClientSocket error."; switch(ErrorEvent) { case eeGeneral : Msg = "The socket received an error message that does not fit into any category."; case eeSend : Msg = "An error occurred when trying to write to the socket connection."; break; case eeReceive : Msg = "An error occurred when trying to read from the socket connection."; break; case eeConnect : Msg = "A connection request that was already accepted could not be completed."; break; case eeDisconnect : Msg = "An error occurred when trying to close a connection."; break; case eeAccept : Msg = "A problem occurred when trying to accept a client connection request."; } Application->MessageBox(Msg.c_str(), "ClientSocket Error", MB_OK | MB_ICONSTOP); // prevent exception ErrorCode = 0; }Bei ClientSocket habe ich folgende Optionen eingestellt:
Active: false
Address:
ClientType: ctNonBlocking
Host: http://www.google.de
Name: ClientSocket1
Port: 80
Service:
Tag: 0Danach rufe ich bei einem Button-CLick die Open-Methode auf:
void __fastcall TForm1::Button1Click(TObject *Sender) { ClientSocket1->Open(); }Lg freeze
-
So auf den ersten Blick: das 'http://' gehört nicht zum Hostnamen.
-
Nur mal ne frage am Rande.
Wäre unter Windoes dieser Code nicht besser um die Fehlermeldungen anzuzeigen?
Damit wird die passende Windows Fehlermeldung zum Error Code ausgegen.LPVOID lpMsgBuf; FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL, ErrorCode, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language (LPTSTR) &lpMsgBuf, 0, NULL ); ShowMessage((LPTSTR) lpMsgBuf);//Man kann natürlich auch MessageDlg usw nehmen. // Free the buffer. LocalFree( lpMsgBuf ); ErrorCode=0;
-
Handelt es sich denn um Windows Errors? Aber du hast schon den richtigen Gedanken gehegt: Auch bei Borland-Exceptions gibt es eine eingebaute klartextnachricht...
Aber die will man ja nicht immer haben sondern was eigenes dröseln? (o;-junix
-
Bei den TServer/TClientSockets bin ich mir zu 99% sicher das die Error Codes Windows Codes sind.
Man kann ja beide Methoden kombinieren,bei ausgewählten Codes/ErrorEvents eine eigene Message, bei den anderen die von Windows, ist besser als "Unspecified ClientSocket error."

Ausserdem werden die von Windows in der eingestellten Sprache angezeigt.
-
Beliah schrieb:
Bei den TServer/TClientSockets bin ich mir zu 99% sicher das die Error Codes Windows Codes sind.
Klar. Macht ja auch sinn.. aber was machst du wenn da der Entwickler findet "scheiss drauf ich mach das jetzt anders"?