Hallo,
ich verwende den Socketservercode des PHP-Manuals:
Code:
<?php
error_reporting(E_ALL);
/* 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 = 'localhost';
$port = 10000;
if (($socket = socket_create(AF_INET, SOCK_STREAM, 0)) < 0) {
echo "socket_create() fehlgeschlagen! Grund: " . socket_strerror($socket) . "\r\n";
}
if (($ret = socket_bind($socket, $address, $port)) < 0) {
echo "socket_bind() fehlgeschlagen! Grund: " . socket_strerror($ret) . "\r\n";
}
if (($ret = socket_listen ($socket, 5)) < 0) {
echo "socket_listen() fehlgeschlagen! Grund: " . socket_strerror($ret) . "\r\n";
}
do {
if (($msgsock = socket_accept($socket)) < 0) {
echo "socket_accept() fehlgeschlagen! Grund: " . socket_strerror($msgsock) . "\r\n";
break;
}
//Anweisungen senden
$msg = "\r\nWillkommen auf dem PHP Testserver \r\n" .
"Um zu beenden, geben Sie 'quit' ein.\r\nUm den Server herunterzufahren, geben Sie 'shutdown' ein.\r\n\r\n";
socket_write($msgsock, $msg, strlen($msg));
do {
$buf = socket_read($msgsock, 2048);
if (FALSE === $buf) {
echo "socket_read() fehlgeschlagen! Grund: " . socket_strerror($ret) . "\r\n";
break 2;
}
if (!$buf = trim($buf)) {
continue;
}
if ($buf == 'quit') {
break;
}
if ($buf == 'shutdown') {
socket_close($msgsock);
break 2;
}
$talkback = "PHP: Sie haben '$buf' eingegeben\r\n";
socket_write($msgsock, $talkback, strlen($talkback));
} while(true);
socket_close($msgsock);
} while(true);
socket_close($socket);
?>
Dieser funktioniert, allerdings kann ich keine Wörter in die Konsole schreiben, da bereits der erste Buchstabe vom Server wieder auf der Konsole dargestellt wird.
Woran kann der Fehler liegen?
MfG
Edit:
Ich verwende Win XP Pro, PHP 5.1.4