ClientSocket, wie lesen?



  • vielleicht solltest du dir mal die RFC von HTTP reinziehen... ( http://www.w3c.org ) oder hier mal vorbei schauen.

    -junix



  • ob es geht siehst du am besten an einem selbstgebastelten Server(mit ServerSocket) oder auch gut zum testen geht ein irc oder battle.net Server.

    machmal

    ClientSocket1 -> Host=  "europe.battle.net";
      ClientSocket1 -> Port=  6112;
      ClientSocket1 -> Open();
    
      ClientSocket->Socket->SendText("c"); // für als chatbot einloggen
    

    das Memo1->Lines->Add(Socket->ReceiveText()); lass stehen und du wirst sehen das etwas zurückkommen wird...

    Aber webserver ansprechen geht wie schon gesagt etwas komplizierter... dazu musst du in einem nicht soo einfachem übergeordnetem Protokoll kommunizieren(http halt) und das solltest du vorher erstmal lernen 😃



  • nun, danke erstmal für die tips.

    aber http ist soweit kein problem, mittels telnet klappen die abfragen ja alle.
    connects auf chargen oder echo scheinen zu funktionieren, mich beschleicht der verdacht dass man an die http befehle noch irgendwelche steuerzeichen anhängen muss....
    mal schaun 🙂

    tschau



  • Original erstellt von <nme>:
    aber http ist soweit kein problem

    definitiv schon, denn du hast einwichtiges element vergessen das HTTP benötigt. Schau dir den zweiten link mal genau an... da steht was von blank line...$

    -junix



  • meinst du das CLRF
    das funktioniert so aber auch nicht ?

    request="GET /pub/WWW/TheProject.html HTTP/1.1 CLRF";
    

    kannst du uns nicht noch nen Tip geben oder vielleicht die Lösung sagen ? 😞



  • Hi,
    vielleicht hilft eine Escapesequenz?

    Alexander Sulfrian



  • mmh, so funktioniert es

    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    AnsiString request;
    
    request="HEAD /k1/index.html HTTP/1.0 \n\n";
    ClientSocket1->Host="192.168.0.1";
    ClientSocket1->Port=80;
    ClientSocket1->Open();
    ClientSocket1->Socket->SendText(request);
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::ClientSocket1Read(TObject *Sender,
          TCustomWinSocket *Socket)
    {
    Memo1->Lines->Add(Socket->ReceiveText());
    }
    

    allerdings erst wenn ich den Button zweimal hintereinander drücke...
    wo muss ich eigentlich ClientSocket1->Close(); ausführen, damit die Verbindung ordentlich wieder getrennt wird ?



  • CRLF = Carrage return, Linefeed \r\n!!!

    -junix



  • das problem mit dem 2x drücken hatte ich auch schon, konnte das nicht lösen

    auch ein \r\n oder auch zum test \x0A\x0D und umgekehrt bringt auch nix.
    man muss mind. 2x den button drücken.



  • Klar... weil ihr die Verbindung mit dem Request überfahrt. Die Verbindung muss nach dem Aufruf von Open () noch nicht sicher stehen. Ich würde hier empfehlen einen Event zu nutzen. (Schaut euch da mal etwas um). Btw: Das HTTP schreibt \r\n vor und daran hat man sich zu halten. Jeder Request muss mit 2 \r\n abgeschlossen werden!

    -junix



  • das ist des rätsels Lösung
    --> vielen Dank junix 🙂

    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    ClientSocket1->Host=Edit1->Text;
    ClientSocket1->Port=80;
    Memo1->Lines->Clear();
    ClientSocket1->Open();
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
    {
     ClientSocket1->Close();
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::ClientSocket1Error(TObject *Sender,
          TCustomWinSocket *Socket, TErrorEvent ErrorEvent, int &ErrorCode)
    {
    ErrorCode=0;        
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::ClientSocket1Connect(TObject *Sender,
          TCustomWinSocket *Socket)
    {
    AnsiString request="HEAD / HTTP/1.0 \r\n\r\n";
    ClientSocket1->Socket->SendText(request);
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::ClientSocket1Read(TObject *Sender,
          TCustomWinSocket *Socket)
    {
    Memo1->Lines->Add(Socket->ReceiveText());        
    }
    //---------------------------------------------------------------------------
    

Anmelden zum Antworten