note 44501 added to function.stream-socket-server
| From: | andrey@php.net | Date: | Sun, 08 Aug 2004 04:02:49 +0000 |
| Subject: | note 44501 added to function.stream-socket-server | ||
| Groups: | php.notes | ||
| Request: | Send a blank email to php-notes+get-74192@lists.php.net to get a copy of this message | ||
Just a small example how to use this function and also stream_select() to make a server that accepts
more than one connections (can have many clients connected):
In master we hold all opened connections. Just before calling stream select we copy the array to
$read and then pass it ot stream_select(). In case that we may read from at least one socket, $read
will contain socket descriptors. $master is needed not to lose references to the opened connections
we have.
stream_server.php :
<?php
$master = array();
$socket = stream_socket_server("tcp://0.0.0.0:8000", $errno, $errstr);
if (!$socket) {
echo "$errstr ($errno)<br />\n";
} else {
$master[] = $socket;
$read = $master;
while (1) {
$read = $master;
$mod_fd = stream_select($read, $_w = NULL, $_e = NULL, 5);
if ($mod_fd === FALSE) {
break;
}
for ($i = 0; $i < $mod_fd; ++$i) {
if ($read[$i] === $socket) {
$conn = stream_socket_accept($socket);
fwrite($conn, "Hello! The time is ".date("n/j/Y g:i a")."\n");
$master[] = $conn;
} else {
$sock_data = fread($read[$i], 1024);
var_dump($sock_data);
if (strlen($sock_data) === 0) { // connection closed
$key_to_del = array_search($read[$i], $master, TRUE);
fclose($read[$i]);
unset($master[$key_to_del]);
} else if ($sock_data === FALSE) {
echo "Something bad happened";
$key_to_del = array_search($read[$i], $master, TRUE);
unset($master[$key_to_del]);
} else {
echo "The client has sent :"; var_dump($sock_data);
fwrite($read[$i], "You have sent :[".$sock_data."]\n");
fclose($read[$i]);
unset($master[array_search($read[$i], $master)]);
}
}
}
}
}
?>
stream_client.php:
<?php
$fp = stream_socket_client("tcp://127.0.0.1:8000", $errno, $errstr, 30);
if (!$fp) {
echo "$errstr ($errno)<br />\n";
} else {
fwrite($fp, "Aloha");
while (!feof($fp)) {
var_dump(fgets($fp, 1024));
}
fclose($fp);
}
?>
Thanks
----
Manual Page -- http://www.php.net/manual/en/function.stream-socket-server.php
Edit -- http://master.php.net/manage/user-notes.php?action=edit+44501
Delete -- http://master.php.net/manage/user-notes.php?action=delete+44501&report=yes
Reject -- http://master.php.net/manage/user-notes.php?action=reject+44501&report=yes
Search -- http://master.php.net/manage/user-notes.php