<?php
server_time_limit(0);
// open a server on port 10000
$server_addr="tcp://0.0.0.0:10000";
$server = stream_socket_server($server_addr, $errno, $errorMessage);
if ($server === false)
{
debug("Could not bind to socket: $errorMessage");
exit;
}
debug("Server listens successfully on $server_addr - press Ctrl-C to stop it");
$client_socks = array();
while(true)
{
//prepare readable sockets
$read_socks = $client_socks;
$read_socks[] = $server;
//start reading and use a large timeout
if(!stream_select ( $read_socks, $write, $except, 300000 ))
{
die('something went wrong while selecting');
}
//new client
if(in_array($server, $read_socks))
{
$new_client = stream_socket_accept($server);
if ($new_client)
{
//print remote client information, ip and port number
debug('New Connection accepted from ' . stream_socket_get_name($new_client, true) );
$client_socks[] = $new_client;
debug( "Now there are total ". count($client_socks) . " clients connected");
}
//delete the server socket from the read sockets
unset($read_socks[ array_search($server, $read_socks) ]);
}
//message from existing client
foreach($read_socks as $sock)
{
$data = fread($sock, 128);
$ip=stream_socket_get_name($client_socks[ array_search($sock, $client_socks) ], true);
if(!$data)
{
unset($client_socks[ array_search($sock, $client_socks) ]);
@fclose($sock);
debug( "A client ($ip) disconnected. Now there are total ". count($client_socks) . " clients.n");
continue;
}else
{
//-----------------------------------------------------------------------------------------------------------------------------------
//data process here
//data process end here
//-----------------------------------------------------------------------------------------------------------------------------------
debug("$ip: ".$data);
}
//send the message back to client
fwrite($sock, $data);
}
}
function debug($s)
{
$d=date("Y-m-d H:i:s");
echo "\r\n $d - : ".$s;
}
?>