Server Antwort einlesen



  • hi,
    ich möchte eine antwort einlesen und deswegen mit CONTENT-LENGTH
    arbeiten, damit ich weiß, ab wann ich kein zeichen mehr einlesen
    brauche da recv ansonsten noch eine zeit lang wartet bis es zu einem
    fehler kommt.

    das problem:
    CONTENT-LENGTH wird ja erst in der antwort selbst übermittelt.

    lösungs-idee:
    kann man denn zB. bis zur ersten leerzeile zeichenweise einlesen,
    und jedes mal überprüfen ob "CONTENT-LENGTH" schon im text enthalten ist,
    und dann alles dahinter bis zum '/r/n' als zahl speichern und noch genau
    soviel zeichen einlesen?!
    wie habt ihr das gemacht?! - mein weg scheint mir ein wenig umständlich.
    kann recv() nicht erkennen das er nichts mehr erhält, ohne wartezeit?!

    mfg



  • die antwort in zeilen zerteilen bis eine leerzeile kommt





  • Aus Deiner Ausführung nehme ich an, Du willst mit einem HTTP-Server kommunizieren. Da gibt es mehrere Möglichkeiten. Libcurl ist eine Lösung. Du kannst auch in Deinem Request einen Header "Connection: close\r\n" mit geben. Dann liest Du, bis der Socket geschlossen wurde. Oder Du verwendest HTTP-1.0, da ist das Standardverhalten. Ansonsten liefert der Content-Length-Header die Größe des Bodys, also die Anzahl der Bytes nach der ersten Leerzeile. Das RFC 2616 hilft hier weiter.



  • Hi,
    ja, genau das will ich 🙂
    'Connection: close' entspricht hier allerdings nicht meinen bedürfnissen,
    da ich weiterhin mit dem server kommunizieren (wie du so schön sagtest) möchte.

    ich habe das jetzt folgendermaßen gelöst:

    - zeilenweise einlesen
    - wenn zeile == "\r\n" dann: einlesen abbrechen
    - antwort nach "CONTENT-LENGTH" durchsuchen,
    wenn gefunden -> alles dahinter bis zum nächten '\r' in iNumLen einlesen.
    - noch iNumLen zeichen einlesen

    danke an alle - mfg


Anmelden zum Antworten