Frank Opper: C++: TCP Server, Riesenproblem beim Empfang von Daten

Beitrag lesen

Hallo Julian,

j = 0;
// // // // // // // //
        while ((n = read (connfd, &puffer[j], 1)) > 0) { // Diese 3 Zeilen while(){}-Schleife sind mein Problem!
         j++;
        }
// // // // // // // //

puffer[j] = '\0';
        if(n < 0) {
         printf ("Fehler bei read() ...\n");
         exit (EXIT_FAILURE);
        }
printf("Message:\n%s\n", puffer);

read gibt bei Erfolg die Anzahl der gelesenen Zeichen zurück. Ein Wert von 0 wird bei EOF geliefert. Die Schleife wird bei EOF oder Fehler verlassen. Der Fehlerzweig wird aber gemäß Deiner Angaben unten nicht durchlaufen.

Das Programm wird bei mir absolut Fehlerfrei erstellt.
Das spielt sich bei mir auf der Konsole ab:

Socket erfolgreich angelegt
Server ist bereit und wartet ...
Connection accepted ...
Children started ...
Wait for message ...
/* [Hier passiert dann gar nichts mehr, das heisst der Client (z.B. Firefox) sendet aber der Server gibt momentan nichts aus.
Der Client hat fertig übertragen und wartet auf Antwort
Der Server wartet meines erachtens immer noch auf Nachricht obwohl der Client schon fertig ist

Die Frage ist, ob der Client an dieser Stelle schon den Socket geschlossen hat. Erst dann wird beim Server EOF signalisiert und die Schleife verlassen.

Beendet man den Client dann gibt der Server das aus was schon lange auf dem Bildschirm zu sehen sein sollte.] */

Warum sollte vorher was auf dem Bildschirm stehen? Erst jetzt hat der Sever ein EOF auf dem Socket erhalten und kann mit der Verarbeitung fortfahren.

Viele Grüße
Frank