PHP + JavaScript + Sockets

  • Moin,
    ich steh gerade vor einem Problem und komme nicht wirklich weiter:
    Also, ich möchte einen Webtelnet-Client schreiben.

    Geht ja mit PHP relativ einfach:
    $f = fsockopen("irgendeinserver", "23")
    und dann mit
    fwrite() und fread()

    Ist auch alles nicht das Problem, sondern ich möchte eine Textarea, in die die Ausgabe kommt und ein input-Feld, in das man die Befehle eingibt, die an den Server gesendet werden sollen.
    Funktioniert ja auch so weit, nur:
    Die Ausgabe soll ja an die Textarea angehängt werden, das geht ja mit JavaScript auch ganz einfach, aber da die Ausgabe ja mit PHP geholt wird, weiss ich nicht wie ich das machen soll. Eigentlich müsste ich ja dann eine JS-Funktion per PHP aufrufen, reloaden kann ich ja nicht, da er mir ja sonst die Connection zu macht.

    Oder gibt es ne ganz andere Möglichkeit?

    Gruß,
    xmms

  • Wenn du die Ausgabe eh immer mitsendest, dann kannst das ja auch ganz einfach im PHP-Script anhängen:

    Code
    $varTextfeld = 'Ich bin das was vorher drinstand...';
    $varTextfeld .= "\nund ich werden angehängt...";

    Wenn ich das richtig verstanden habe, dann müssen doch eigentlich nur Textarea und Ausgabe aneinander gehängt werden. Oder bin ich doch zu früh aufgestand? ;)

  • naja, nee, irgendwie nicht ;)

    Also, im PHP-Teil hab ich ne Socket-Connection:

    Code
    $f = fsockopen("server", "port");
    $ausgabe = fread($f, "2048");

    Jetzt soll das, was in $ausgabe steht an eine Textarea angehängt werden. Das kann man ja aber JS machen. Allerdings ist das ja eine PHP-Variable, also müsste ich doch die JS-Funktion, die das mit der Textarea regelt, aus der PHP-Funktion aufrufen?!

  • OK, bin ein Stück weitergekommen und steht vor einem neuen Problem
    Habe jetzt die funktion, die nur einmal die verbindung auf macht

    Code
    function bla($command) {
        static $f = 0;
        if($f == 0) {
            $f = fsockopen(bla);
            print "auf\n";
        }
    
        fwrite ($f, $command);
    	print fread ($f, "2048");
    }

    Der Benutzer soll $command in eine inputbox eingeben können, allerdings darf die Seite ja nicht neugeladen werden (wegen der connection)

    Also hab ich mir gedacht, ich machs mit ajax. Fragt sich nur wie.

    Code
    try
    { xmlhttp = new XMLHttpRequest(); }
    catch (error)
    { try
    { xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); }
    } 
    
    
    xmlhttp.open("GET", "telnet.php?command=f");


    bewirkt ja das gleiche wie ein Reload, also hab ich wieder das Problem :(

  • Zitat von Henne

    Sofern du nicht pfsockopen() verwendest, ist deine Verbindung bei Beendigung des Scriptes doch so oder so futsch.


    hmmhmm. Damit komme ich ein Stück weiter, danke. Aber nachdem ich den 2 oder 3 Befehl gesendet hab, dauert es ne halbe ewigkeit und es tut sich nix mehr

    EDIT: Ok, es lag am fehlenden \n

  • Gut. Dank pfsockopen bin ich ein gutes Stück weiter gekommen.
    Bleibt allerdings das erste Problem: Wie rufe ich eine JS-Funktion aus PHP aus, um den Text an die Textarea anzuhängen, oder gehts auch anders?

  • Zitat von Dr. Evil

    so rum geht das nicht: das JavaScript muss das PHP-Script per XMLHTTPRequest (alle x Millisekunden mit setInterval) abrufen. Und das JavaScript wertet dann wieder die Rückgabe des PHP-Skripts aus und fügt die Daten hinten an die Textarea an.


    Hmm, klingt kompliziert, ich setz mich nochmal dran