On Wed, Mar 11, 2009 at 09:38:53AM -0300, Jorge Giunta wrote:
> Muchachos este es un server multithreat en php, pero necesito enviar un  
> mensaje de bienvenida apenas se conecte uno de los clientes, pero no  
> consigo hacerlo, podria alguien darme una mano ? Aca esta el codigo.
>
>> #!/usr/bin/php
>> <?php
>>
>> $hostname = gethostbyname("localhost");
>> $address = '0.0.0.0';
>> $port = 12345;
>>
>> set_time_limit(0);
>> ob_implicit_flush();
>> ignore_user_abort(true);
>>  function socketError($errorFunction, $die=false) {
>>     $errMsg = socket_strerror(socket_last_error());
>>     }
>>  if (!($server = @socket_create(AF_INET, SOCK_STREAM, SOL_TCP))) {
>>     socketError('socket_create', true);
>> }
>>  socket_set_option($server, SOL_SOCKET, SO_REUSEADDR, 1);
>>  if (!...@socket_bind($server, $address, $port)) {
>>     socketError('socket_bind', true);
>> }
>>  if (!...@socket_listen($server)) {
>>     socketError('socket_listen', true);
>> }
>>  $allSockets = array($server);
>>  while (true) {
>>     echo ' ';
>>     if (connection_aborted()) {
>>         foreach ($allSockets as $socket) {
>>             socket_close($socket);
>>         }
>>         break;
>>     }
>>      $changedSockets = $allSockets;
>>     socket_select($changedSockets, $write = NULL, $except = NULL, 5);
>>
>>     foreach($changedSockets as $socket) {
>>         if ($socket == $server) {
>>             if (!($client = @socket_accept($server))) {
>>                 socketError('socket_accept', false);
>>                 } else {
>>                 $allSockets[] = $client;
>>                 }
>>         } else {
>>                 $data = socket_read($socket, 2048);
>> //                 
>> socket_write($socket,"BIENVENIDO",strlen("BIENVENIDO"));  ESTO PROBE  
>> PONIENDOLO ARRIBA Y ABAJO Y EN TODOS LADOS Y NADA.
>>                 }
>>
>>             if ($data === false || $data === '') {
>>                     unset($allSockets[array_search($socket,  
>> $allSockets)]);
>>             socket_close($socket);
>>             } else {
>>                         echo "$socket: $data\n";
>>             }
>>         }
>>     }
>> }
>> ?>
> Muchas gracias gente !!!! saludos
>
> --
> Jorge

Un comentario, no es multithread, es event-driven ese código :)

Además, no me imagino multithread en PHP.

Por cierto, copia el código y funciona sin problemas. Solo sobraba una llave al 
final.

saludos!


PD: lo probé con un telnet, no se como lo estarás probando vos pero tal vez 
estes leyendo con alguna función que lee por líneas del lado cliente y ese sea 
tu problema. Agregale un '\n\r' a BIENVENIDO.

-- 

--------------
Diego Woitasen

Responder a