Problem mit Sockets(Eingaben falsch erkannt)

Drade

Mitglied
Hallo ich habe ein kleines Problem mit sockets.
Also ich habe ein paar fertige scripte zum Thema Sockets gefunden und sie mal ausprobiert. Bei den Scripten wird jeweils auf eingehende Daten auf einem bestimmten Port gelauscht. Dann kann ich mit telnet könnecten und daten senden. Allerdings wird mir jeder Buchstabe einzeln erkannt.

Z.B.:
Ich will das Wort quit schreiben.
Als antwort würde ich dann bekommen:
Ihre eingabe war: q
Ihre eingabe war: u
Ihre eingabe war: i
Ihre eingabe war: t

Hier das Script
PHP:
#!/usr/bin/php -q
<?php
error_reporting(E_ALL);

set_time_limit(0);
ob_implicit_flush();

$address = '127.0.0.1';
$port = 8888;

function handle_client($allclient, $socket, $buf, $bytes) {
   foreach($allclient as $client) {
       socket_write($client, "$socket wrote: $buf");
   }
}

if (($master = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) < 0) {
   echo "socket_create() failed: reason: " . socket_strerror($master) . "\n";
}

socket_set_option($master, SOL_SOCKET,SO_REUSEADDR, 1); 

if (($ret = socket_bind($master, $address, $port)) < 0) {
   echo "socket_bind() failed: reason: " . socket_strerror($ret) . "\n";
}

if (($ret = socket_listen($master, 5)) < 0) {
   echo "socket_listen() failed: reason: " . socket_strerror($ret) . "\n";
}

$read_sockets = array($master);

while (true) {
   $changed_sockets = $read_sockets;
   $num_changed_sockets = socket_select($changed_sockets, $write = NULL, $except = NULL, NULL);
   foreach($changed_sockets as $socket) {
       if ($socket == $master) {
           if (($client = socket_accept($master)) < 0) {
               echo "socket_accept() failed: reason: " . socket_strerror($msgsock) . "\n";
               continue;
           } else {
               array_push($read_sockets, $client);
           }
       } else {
           $bytes = socket_recv($socket, $buffer, 2048, 0);
           if ($bytes == 0) {
               $index = array_search($socket, $read_sockets);
               unset($read_sockets[$index]);
               socket_close($socket);
           } else {
               $allclients = $read_sockets;
               array_shift($allclients);    // remove master
               handle_client($allclients, $socket, $buffer, $bytes);
           }
       }
       
   }
}

?>

//Der Server läuft unter WinXP

Ich möchte aber, dass mir die Eingabe erst erkannt wird sobald ich mit enter bestätige.
Kann mir da bitte jemand weiterhelfen?
 
Also ich hab jetzt grad Dein Script 1:1 kopiert und mal gestartet.
Es macht bei mir (Linux 2.6/PHP 5.1.1) genau was Du willst. Es wartet bis ich Enter druecke und gibt mir dann meine Eingabe zurueck.
3223
Resource id #5 wrote: 3223
lalaland
Resource id #5 wrote: lalaland

Welche PHP-Version nutzt Du? Ich werd's gleich mal mit PHP4 probieren, aber wenn's dann auch funktioniert wuerde ich auf Windows als Problem tippen.

Nachtrag: Auch mit PHP 4.4.1 funktioniert es bei mir.
 
Zurück