phpbar.de logo

Mailinglisten-Archive

[php] socket-server / client

[php] socket-server / client

Karl Robert php_(at)_phpcenter.de
Mon, 9 Apr 2001 14:54:31 +0200 (MEST)


Hallo!

Ich versuche zur Zeit, aus einer rehct großen Funktionsbibliothek einen
eigenen server zu bauen, der über Socketverbindungen abgefragt werden kann.

Das Script wartet also per accept_connect() auf einen socket-request,
verarbeitet diesen und gibt das Ergebnis zurück. Über Telnet funktioniert das auch
problemlos, ich kann mich mit dem SCript verbinden und Abfragen abschicken.

Jetzt versuche ich aber eine Abfrage über ein Client-Script. Hierbei wird
keine Ausgabe an das Script zurückgegeben.

Hier die entscheidenden Teile der beiden scripts:

Server:

// Socket wurde erstellt, bind & listen ausgeführt
do {
    if (($msgsock = accept_connect($sock)) < 0) {
        echo "accept_connect() failed: reason: " . strerror ($msgsock) .
"\n";     Warten auf request
        break;
    }
    do {
        $buf = '';
        $ret = read ($msgsock, $buf, 2048);         // request auslesen
        echo "request: $ret <br>";
        if ($ret < 0) {
            echo "read() failed: reason: " . strerror ($ret) . "\n";
            break 2;
        }
        if ($ret == 0) {
            break 2;
        }
        $buf = trim ($buf);

        $talkback = eval($buf);                                    //
request verabeiten
        write ($msgsock, $talkback, strlen ($talkback)); // ergebnis
zurückschreiben
        echo "$buf\n";
    } while (true);
    close ($msgsock);
} while (true);



Client:


// Socket wurde bereits erstellt, Senden des requests

write ($socket, $in, strlen ($in));
         while (read ($socket, $out, "\t"))  // Auslesen der Response
               {
               echo $out;
               }


Ich vermute, das Problem liegt jeweils an der Begrenzung der read und write
anweisungen. Die genaue Länge eines eingehenden requests ist ja unbekannt,
daher vermute ich, es müßte ein eindeutiges Steuerzeichen festgelegt werden.
Ich habe aber sowohl mit \0, \n als auch \t die laut manual verwendet werden
können kein Ergebnis erzielen können.

Wie gesagt: per Telnet funktioniert es wunderbar, nur das Script bekommt
keine Antwort zurück, obwohl die Verbindung erfolgreich hergestellt wird.

Vielen Dank für alle Antworten, ich hoffe, ich konnte das Problem
einigermaßen verständlich schildern.

--kr

-- 
GMX - Die Kommunikationsplattform im Internet.
http://www.gmx.net



php::bar PHP Wiki   -   Listenarchive