FSocket und fgets

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • FSocket und fgets

    Hallo zusammen,

    ich habe ein paar Probleme mit Fsockets und fgets().

    Wenn ich z.B bei einer offenen verbindung eine Zeile aus dem Fsocket file
    auslesen möchte benutze ich $data = fgets( $handle, 1024 );.
    Das ist soweit auch kein Problem wenn die Daten die empfangen werden nicht länger als
    eine Zeile sind.

    Das Problem fängt an wenn die Daten länger sind.
    Man müsste ja denken auch dies sollte kein Problem sein indem
    man folgende Funktion nutzt:

    PHP-Code:
    while( !feof$handle )
        
    $date .= fgets$handle1024 ); 
    Tja dies funtioniert aber nur wenn nach der Übertragung die
    verbindung vom server gekappt wird ansonsten wird !feof()
    niemals erreicht. In dieser Situation befinde ich mich aber leider nicht.
    Bei mir bleibt die Verbindung weiter bestehen.

    Man könnte jetzt z.B ein Abschlusszeichen definieren wie z.B mit der folgenden
    Funktion:

    PHP-Code:
    $date fgets$handle1024 );
    while( !
    ereg"\.\n\r" $data )
        
    $date .= fgets$handle1024 ); 
    Dies würde definitiv gehen. Aber leider bei mir nicht, da es kein Abschlusszeichen
    gibt.

    Deshalb würde ich gerne wissen ob es nicht noch eine andere Variante gibt.
    Ich habe schon einiges ausprobiert aber nichts geht so richtig.

    Gehen muss es ja irgendwie denn wenn ich z.B mit Telnet die Verbindung aufbaue
    kann Telnet Daten empfangen ohne jegliches Abschlusszeichen zu kennen.
    Die Frage ist nur WIE?????
    Zuletzt geändert von NoPlanB; 16.02.2005, 14:35.

  • #2
    Wenn du immer Blöcke zu x Zeichen liest, warum schaust du dann nicht nach, ob der Block, den du bekommen hast, weniger als x Zeichen enthält?
    PHP-Code:
    $data $last_block '';
    do {
      
    $last_block fgets($handle128);
      
    $data .= $last_block;
    } while (!
    feof$handle) and strlen($last_black) == 128); 
    So ähnlich
    Ich denke, also bin ich. - Einige sind trotzdem...

    Kommentar


    • #3
      Original geschrieben von mrhappiness
      Wenn du immer Blöcke zu x Zeichen liest, warum schaust du dann nicht nach, ob der Block, den du bekommen hast, weniger als x Zeichen enthält?
      fgets liest nicht immer die angegebene anzahl zeichen, sondern maximal diese anzahl.
      fgets liest in erster linie zeilen.
      I don't believe in rebirth. Actually, I never did in my whole lives.

      Kommentar


      • #4
        Also nach der Zeilenlänge kann ich nicht gehen.
        Wieso ? Ganz einfach.

        Wenn ich also eine Zeile mit fgets einlese und Daten bekomme
        und danach aber keine Daten mehr kommen und ich trotzdem fgets aufrufe bleibt der parser solange da stehen bis wirklich Daten ankommen.
        Das liegt daran das der Blocking Mode auf True gesetzt ist.
        Den könnte ich auch auf False setzen. Dabei besteht aber die Gefahr wenn ich Daten abhole noch gar nicht alle angekommen sind....

        Ich vermute mal das es mit Fsocket nicht geht und ich das alles mit richtigen Sockets machen muss.

        Kommentar

        Lädt...
        X