php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2006

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 07.08.2006, 19:19  
Neuer Benutzer
 
Registriert seit: 20.10.2005
Beiträge: 7
toKad
Standard PHP Sockets: Echoserver nimmt nur ein Zeichen der Eingabe

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
toKad ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 07.08.2006, 19:51  
Erfahrener Benutzer
 
Registriert seit: 26.07.2006
Beiträge: 121
JumperII
Standard

Hallo,

ohne mir jetzt die PHPSockets genauer angesehen zu haben gehe ich davon aus, dass Du einfach zu langsam schreibst

Ich denke, du solltest die Daten vom socket_read solange sammeln, bis ein CR/LF eingetrudelt ist. Dann kann der davor eingegebene String erst analysiert werden. Ist eigentlich einfache Socket-Programmierung

Gruß,
Jumper, the II.
JumperII ist offline  
Alt 08.08.2006, 15:16  
Neuer Benutzer
 
Registriert seit: 20.10.2005
Beiträge: 7
toKad
Standard

Irgendwie eigenartig, dass in keinem Tutorial das ich gelesen habe erwähnt wurde, dass der Code nur ein Zeichen einliest.
Ich habe jetzt den PHP-Manual Code um einen selbstgeschriebenen simplen Equivalent zum Java-Bufferedreader erweitert und der Server gibt mir die geschriebenen Wörter zurück.

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 = "Willkommen auf dem PHP-Socketechotestserver\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 {
	  $inputend = false;
	  $input = socket_read($msgsock, 2048);
	  while(!$inputend){
	      $lastInput = socket_read($msgsock, 2048);
		if($lastInput == "\r\n"){
		    $inputend = true;
		}else{
		    $input = $input . $lastInput;
		}
	  }

        if (FALSE === $input) {
            echo "socket_read() fehlgeschlagen! Grund: " . socket_strerror($ret) . "\r\n";
            break 2;
        }
        if (!$input = trim($input)) {
            continue;
        }
        if ($input == 'quit') {
            break;
        }
        if ($input == 'shutdown') {
            socket_close($msgsock);
            break 2;
        }
        $talkback = "PHP-Serverecho: Sie haben '$input' eingegeben\r\n";
        socket_write($msgsock, $talkback, strlen($talkback));
    } while(true);
    socket_close($msgsock);
} while(true);
socket_close($socket);
?>
MfG
toKad ist offline  
Alt 08.08.2006, 16:35  
Erfahrener Benutzer
 
Registriert seit: 26.07.2006
Beiträge: 121
JumperII
Standard

noch mal ... du schaffst es nicht, mit der Tastatur schnell genug zeichen zu senden, damit er mehr als ein Zeichen ausgibt. Schreib dir doch mal ein Programm oder versuche es mal mit einem längeren Zeichensatz per Copy&past in das terminal-Fenster einzutragen ... dann siehst Du es ....

Gruß,
Jumper, the II.
JumperII ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Benutze Zeichen anzeigen! cokotech Datenbanken 3 06.06.2008 18:24
Bei richtiger Eingabe Daten an nächste Seite versenden xx_heidi_xx PHP Tipps 2008 49 27.05.2008 14:56
erste 7 zeichen überprüfen aircrash PHP Tipps 2008 1 28.09.2007 09:11
Wieviel Pixel hat ein Zeichen? Ausmessen eines DIV-Container webazubi PHP-Fortgeschrittene 4 06.07.2006 14:52
Unsichtbares Zeichen - IE vs. Firefox Cyberbob_at_tot PHP Tipps 2006 13 13.02.2006 17:23
JAvaScript:Interger zu ASCII Zeichen Xalon HTML, Usability und Barrierefreiheit 7 30.12.2005 19:33
[Erledigt] kleiner und größer Zeichen ausklammern??? PHP Tipps 2007 9 10.11.2005 09:45
Kombination: Zeichen zählen / - ersetzen King2k PHP Tipps 2005-2 2 24.10.2005 20:44
fread ließt zu wenig Zeichen aus PHP Tipps 2005-2 7 01.09.2005 22:40
*kyrillische* zeichen werden falsch angezeigt PHP Tipps 2005 22 19.03.2005 00:51
[Erledigt] nur x zeichen zeigen PHP Tipps 2004-2 2 17.12.2004 15:10
[Erledigt] Select Feld - Eingabe merken ?!? PHP-Fortgeschrittene 4 18.11.2004 12:30
nicht erlaubte Zeichen im SQL - String Datenbanken 0 16.10.2004 11:47
Die 1. 15 Zeichen anzeigen imported_Lumio PHP Tipps 2004 2 23.08.2004 16:16

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php socket, echo server php, php echo server, php socket echo server, php eingabefeld zeichen, php input nur buchstaben, php in socket schreiben, php socket echo, echoserver php, php socket sonderzeichen, php socket echoserver, php echo server socket, socket zeichensatz, java server nimmt nur 1 zeichen an, test server socket terminal, php echo zeichensatz, php kyrillisch echo, php socket read sonderzeichen, php echo nur bis zeichen, socket \\r\\n

Alle Zeitangaben in WEZ +2. Es ist jetzt 15:16 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.