Linux: Socket recv() zeilenweise einlesen?
-
Jo, das ist meine Frage:
Wie schaffe ich es Zeilenweise von einem Socket zu lesen? (Um die Zeilenumbrüche des Clients festzustellen)
oder wie erkenne ich sonst, dass ein GET-Header zu Ende ist?
Bitte helft mir, habe nicht viel Erfahrung mit Sockets
-
Hi!
Ich kenne da ein Tutorial, vielleicht hilfts:
http://www.ecst.csuchico.edu/~beej/guide/net/Code-Hacker
-
Leider nicht, trotzdem danke...
-
Dieser Thread wurde von Moderator/in davie aus dem Forum C++ in das Forum Linux/Unix verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Die einzige Möglichkeit ist wohl die Zeichen einzeln zu lesen und immer zu vergleichen. Das sollte man aber nur machen, wenn einem jemand die Pistole an den Kopf hält.
Besser ist es wohl einen eigenen Puffer zwischen Applikation und Socket zu schieben, der blockweise liest und den Eingabestrom nach deiner Anwendung trennt.
-
Hi,
Ponto hat recht. Zeilenweise lesen geht von Socketobjekten nicht, wie auch? Soll die Funktion blocken, bis eine ganze Zeile da ist?
Lese einfach solange in einen eigenen genügend großen Buffer, bis ein \r\n kommt. Dann kopierst du alles vorher raus, schiebst den Rest ganz noch vorne und behandelst die gelesene Zeile.
Bau aber auch eine Fehlerbehandlung ein, wenn mal ein Client "vergisst" (bzw. böse/defekt ist) und kein \r\n sendet.
ChrisM
-
Unter Unix kannst du mit fdopen ein FILE * auf den Socket erzeugen und dann ganz normal mit fgets oder fscanf arbeiten. Unter Windows (VC++) gibt's dazu auch irgendeine Funktion, irgendwas mit _osf und handle im Namen, aber wie sie genau heißt, weiß ich nicht mehr.
EDIT: Natürlich soll sie blocken, bis die ganze Zeile da ist (zumindest wenn man eines der gängigen Protokolle HTTP, FTP, SMTP, POP usw. ansprechen will)
-
schiebst den Rest ganz noch vorne
Was meinst du damit?
Was man zuviel gelesen hat muss man doch in einem Puffer speichern? Zurück in den Socket-Stream geht es ja wohl nicht mehr?!
-
Hi,
na, ganz nach vorne im Puffer, damit er nicht mit jedem Neuzeilezeichen, mit dem noch Nutzdaten danach kamen, kleiner wird.
ChrisM
-
Dankeschön!