Probleme mit Send()



  • Hallo,

    ich habe ein recht simples Problem, finde aber keine Lösung:

    Ich habe einen kleinen HTTP-Client geschrieben der Webserver mittels GET abfragen kann. Soweit nix aufregendes allerdings kann ich immer nur einen Befehl (z.B. GET /index.html http/1.1) abschicken, welcher korrekt bearbeitet wird. Wenn ich den gleichen oder einen anderen Befehl danach abschicke wird der ignoriert...

    Mein Programmteil:

    [cpp]
    void __fastcall TForm1::SendBtnClick(TObject *Sender)
    {
    
    char command[8192];
    int count;
    
    String eingabe = Eingabe->Text;
    sprintf( sbuffer, eingabe.c_str());
    
    send( sock, sbuffer, strlen( sbuffer), 0);
    
    do      {
            count = recv( sock, rbuffer, sizeof(rbuffer), 0);
            Ausgabe->Lines->Add(rbuffer);
            }
    while (count > 0);[/cpp]
    

    Habe dazu leider nix im Netz gefunden.
    Danke schonmal für die Hilfe



  • Der Socket wurde vermutlich vom Host geschlossen...



  • Das was du suchst nennt sich Pipelining und ist noch nicht oft implementiert. Überprüfe ob der Server dir ein "Connection: close" im Header zurück schickt. Wenn nicht, sollte der Server Pipelining unterstützen.

    http://en.wikipedia.org/wiki/HTTP_pipelining

    mfg.



  • Aber es muss doch eine Möglichkeit geben mehr als einen Befehl senden zu können. Wie siehts aus wenn ich mir jedesmak nen neuen socket anschaffe und nach dem senden wieder schließe?



  • TheOrangeBishop schrieb:

    Aber es muss doch eine Möglichkeit geben mehr als einen Befehl senden zu können. Wie siehts aus wenn ich mir jedesmak nen neuen socket anschaffe und nach dem senden wieder schließe?

    Ja, wenn du so handelst, dann solltest du in deiner Anfrage jedes Mal ein "Connection: close" mitsenden, der Server wird die Verbindung dann auch schließen, auch wenn er pipelining unterstützt.

    mfg.



  • Und der Nachteil?

    Ich denke mal Performance, oder?
    eine andere (einfache) Möglichkeit gibts auf die Schnelle nicht nehme ich an?



  • TheOrangeBishop schrieb:

    Und der Nachteil?

    Ich denke mal Performance, oder?
    eine andere (einfache) Möglichkeit gibts auf die Schnelle nicht nehme ich an?

    Klar, das verbraucht natürlich mehr Traffic und Performance, aber eine andere Lösung, wenn der Server kein Pipelining unterstützt, gibt es nicht.
    Aber das ist normal und Browser wie Firefox arbeiten heute auch noch so, Pipelining ist dort zwar implementiert, aber standardmäßig nicht aktiviert. (Gib \1:config ein und als filter "pipelining")

    mfg.


Anmelden zum Antworten