[Netwerkprogrammierung TCP] Serverantwort mit recv(...) richtig auswerten?
-
Hallo!
Ich habe da mal eine kleine Frage zum Thema Netzwerkprogrammierung:Ich stelle eine TCP-Verbindung zu einem Server her. Der Server sendet mir dann z.B. einen Willkommenstext.
Diesen möchte ich gerne mit der Linux-Funktion recv(...) empfangen.
Meine Idee:
Da ich die Länge dieses Textes nicht kenne, dachte ich mir, lese ich den Text doch Character für Character ein.
-> Problem: Wenn Text zu Ende bricht recv(...) nicht ab, sondern wartet auf nächsten CharacterWie kann man das Problem halbwegs professionell lösen? Oder anders gefragt: Wie wird sowas normalerweise implementiert?
Danke
-jalapeno-
-
Ich habe das genau so gemacht, also char für char einlesen:
void socket_receive(void) { char buffer[1024], c; unsigned int pos = 0; int res; while(state == IS_CONNECTED) { if((res = recv(socket, &c, 1, 0)) <= 0) { if(!res) { // reconnecten weil Fehler aufgetreten } return; } if(c == '\n' || c == '\0') break; if(c == '\r') continue; buffer[pos++] = c; } buffer[pos] = '\0'; printf("%s", buffer); }
Das while(state == IS_CONNECTED) kann auch einfach while(1) sein. Du musst nur aufpassen, ob der Buffer groß genug ist. Ich brauche das bei mir nicht checken, weil mein Server max 512 chars in einer Message sendet, aber das kommt ja auf den Server an.
-
Ja klar, jetzt! Wie Schuppen von den Augen!
\0 ist die Abbruchbedingung! Wie konnt ich das nur "verpeilen"!
Nochmal Danke
-jalapeno-