[b]socket_read() problem[/b] Hallo,
kann mir bitte jemand das erklären:
ich habe einen ( mehrere) socket server aus dem netz gezogen und hab sie getestet. es funktioniert leider bei der socket_read bekomme ich folgendes:
ports habe verschiedene getestet
1. entweder wird nur ein byte gelesen und dann wird von sich selbst close , socket_read($socket,1024) obwohl die anzahl auf 1024 gesetzt ist
2. der klient startet und bleibt hängen
3. endlose schleife
hier ist das beispiel:
<?php
/* Das Skript wartet auf hereinkommende Verbindungsanforderungen. */
set_time_limit (0);
/* Die implizite Ausgabe wird eingeschaltet, so dass man sieht, was gesendet wurde. */
ob_implicit_flush ();
$address = '127.0.0.1';
$port = 4503;
if (($sock = socket_create (AF_INET, SOCK_STREAM, 0))=== false )
{
echo "socket_create() fehlgeschlagen: Grund: " . socket_strerror ($sock) . "\n";
}
if (($ret = socket_bind ($sock, $address, $port))=== false)
{
echo "socket_bind() fehlgeschlagen: Grund: " . socket_strerror ($ret) . "\n";
}
if (($ret = socket_listen ($sock, 5))=== false)
{
echo "socket_listen() fehlgeschlagen: Grund: " . socket_strerror ($ret) . "\n";
}
do
{
if (($msgsock = socket_accept($sock)) === false)
{
echo "socket_accept() fehlgeschlagen: Grund: " . socket_strerror ($msgsock). "\n";
break;
}
/* Anweisungen senden. */
$msg = "\nWillkommen auf dem PHP Testserver. \n" ;
socket_write($msgsock, $msg, strlen($msg));
do
{
$buf = "";
$buf = socket_read ($msgsock, 1024);
$strByte .= $buf;
if (FALSE === $buf && $buf != chr(1) )
{
echo "socket_read() fehlgeschlagen: Grund: " . socket_strerror ($ret) . "\n";
break 2;
}
if (!$buf = trim ($buf))
{
continue;
}
if ($buf == 'quit')
{
break;
}
if ($buf == 'shutdown')
{
socket_close ($msgsock);
break 2;
}
$talkback = "$buf ";
$talkback = "PHP: Sie haben '$buf' eingegeben.\n";
socket_write ($msgsock, $buf , strlen ($buf));
echo $buf;
} while (true);
socket_close ($msgsock);
} while (true);
socket_close ($sock);
?> |