多个socket_read与PHP中的多个客户端

时间:2014-01-17 16:08:18

标签: sockets

我遇到套接字连接问题

我需要多个套接字读取几个客户端,但我可以连接多个客户端,但只能为客户端一个socket_read,如果我添加第二个socket_read,程序无法正常工作

$sock = socket_create(AF_INET, SOCK_STREAM, 0);
$socket_bind($sock, $address , $port);
$socket_listen ($sock , 10)

while (true){ 


$read = array();

//first socket is the master socket
$read[0] = $sock;

//now add the existing client sockets
for ($i = 0; $i < $max_clients; $i++)
{
    if($client_socks[$i] != null)
    {
        $read[$i+1] = $client_socks[$i];

    }
}

//now call select - blocking call
if(socket_select($read , $write , $except , null) === false)
{
    $errorcode = socket_last_error();
    $errormsg = socket_strerror($errorcode);

    die("Could not listen on socket : [$errorcode] $errormsg \n");
}

//if ready contains the master socket, then a new connection has come in
if (in_array($sock, $read)) 
{
    for ($i = 0; $i < $max_clients; $i++)
    {
        if ($client_socks[$i] == null) 
        {
            $client_socks[$i] = socket_accept($sock);

            //display information about the client who is connected
            if(socket_getsockname($client_socks[$i], $address, $port))
            {

                echo "Client $i : $port . \n";
            }

            //Send Welcome message to client
           $msg = "Bienvenido cliente {$key[0]} \n\r";
     $msg .= "1.-Crear Paleta\n\r";
     $msg .= "2.-Ubicar Paleta\n\r";
     $msg .= "exz.-Salir\n\r";
            socket_write($client_socks[$i] , $msg);

            break;
        }
    }
}

//check each client if they send any data
for ($i = 0; $i < $max_clients; $i++)
{

    if (in_array($client_socks[$i] , $read))
    {


        if (false === ($input = socket_read($client_socks[$i],PHP_NORMA))) {
        echo "socket_read() failed: reason: " . socket_strerror(socket_last_error($msgsock)) . "\n";
        break 2;
    }


        echo "client $i : ";
        echo "$input";

        //send response to client
        socket_write ($client_socks[$i], "client $i : ");
        socket_write ($client_socks[$i], $input);

        socket_write ($client_socks[$i], "\r");
        $y++;
    }
}

}

0 个答案:

没有答案