socketprogrammierung



  • hi,
    ich bin gerade dabei ein client-programm zu schreiben, das sich eine text datei von einem web-server abholt. das dabei verwendete anwendungsprotokoll ist http und übertragen wird über tcp/ip.

    das ganze funktioniert soweit auch ganz gut und ich bekomme eine 200 OK bestätigung des servers.

    anzahl = read(socket_number, empfangene_zeichen, sizeof(empfangene_zeichen));
       empfangene_zeichen[anzahl] = '\0';
       printf("%s", empfangene_zeichen);
    

    mein problem ist, dass beim ersten mal auslesen, des empfangspuffers des sockets nicht die komplette antwort ausgelesen wird.
    meine frage: wie kann ich herausfinden ob der gesamte inhalt ausgelesen wurde und wie kann ich weiter auslesen wenn dem nicht so ist?

    thx für eure hilfe



  • In deinem Fall handelt es sich um einen Download. Dabei werden von dem Webserver nacheinander eine bestimmte Anzahl an Bytes versendet. Das Auslesen sollte also durch eine Schleife implementiert werden.



  • danke für deine antwort!
    aber wie kann ich in diesem fall eine abbruchbedingung für die schleife definieren?



  • artyom schrieb:

    aber wie kann ich in diesem fall eine abbruchbedingung für die schleife definieren?

    Da hast du bei HTTP mehrere Möglichkeiten. HTTP 1.0 ohne keepalive beendet die Verbindung nach der Antwort. Da brauchst du einfach nur auslesen bis nichts mehr kommt. Desweiteren gibt es das Content-Length Feld in den meisten Antworten. Ansonsten ist es bei Datenströmen dann so das du einfach immer weiter liest bis du erkennst das eine neue Antwort beginnt und selber die Aufteilung vornimmst.



  • danke vielmals!!!!!



  • HTTP 1.0 sollte das Beste für dich sein.
    HTTP 1.1 transfer-encoding chunked ist wohl zu kompliziert für einen Anfänger:
    https://en.wikipedia.org/wiki/Chunked_transfer_encoding



  • danke, das werde ich mir gleich mal ansehen!!!
    aber ihr habt mir echt geholfen 👍


Anmelden zum Antworten