我遇到问题我无法连接我的socket中的所有客户端。只有在连接新连接时才连接一个客户端。我可以让所有客户端一起发送数据或连接所有客户端。我希望有人可以帮助我。
提前谢谢。
// Set time limit to indefinite execution
set_time_limit (0);
// Set the ip and port we will listen on
$address = '192.168.0.11';//server ip demo only.
$port = 123;
$max_clients = 10;
// Array that will hold client information
$client = array();
// Create a TCP Stream socket
$sock = socket_create(AF_INET, SOCK_STREAM, 0);
// Bind the socket to an address/port
socket_bind($sock, $address, $port) or die('Could not bind to address');
// Start listening for connections
socket_listen($sock);
// Loop continuously
while (true) {
$file = fopen('txt.log','a');
// Setup clients listen socket for reading
$read[0] = $sock;
for ($i = 0; $i < $max_clients; $i++)
{
if (isset($client[$i]))
if ($client[$i]['sock'] != null)
$read[$i + 1] = $client[$i]['sock'] ;
}
// Set up a blocking call to socket_select()
$write = null;
$except = NULL;
$tv_sec = NULL;
echo "connecting";
$ready = socket_select($read,$write,$except,$tv_sec);
/* if a new connection is being made add it to the client array */
if (in_array($sock, $read)) {
for ($i = 0; $i < $max_clients; $i++)
{
if (!isset($client[$i])) {
$client[$i] = array();
socket_set_nonblock($sock);
$client[$i]['sock'] = socket_accept($sock);
$file = fopen('txt.log','a');
echo("Accepting incomming connection...\n");
break;
}
elseif ($i == $max_clients - 1)
print ("too many clients");
}
if (--$ready <= 0)
continue;
} // end if in_array
// If a client is trying to write - handle it now
for ($i = 0; $i < $max_clients; $i++) // for each client
{
if (isset($client[$i]))
if (in_array($client[$i]['sock'] , $read))
{
$input = socket_read($client[$i]['sock'] , 1024);
if ($input == null) {
// Zero length string meaning disconnected
echo("Client disconnected\n");
unset($client[$i]);
fclose($file);
}
$n = trim($input);
if ($n == 'exit') {
echo("Client requested disconnect\n");
// requested disconnect
socket_close($client[$i]['sock']);
}
elseif ($input) {
echo("Receiving data\n");
// strip white spaces and write back to user
$output = ($input);
//socket_write($client[$i]['sock'],$output);
fwrite($file,$output);
echo $output."\r\n";
}
} else {
// Close the socket
if (isset($client[$i]))
echo("Client disconnected\n");
if ($client[$i]['sock'] != null){
socket_close($client[$i]['sock']);
unset($client[$i]);
}
}
}
fclose($file);//closing file
} // end while
// Close the master sockets
echo("Shutting down\n");
socket_close($sock);
fclose($file);