Diego Woitasen wrote:
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.

Pero con telnet, tenes que darle enter para que muestre el mensaje de bienvenida !! sino no muestra nada apenas conectas !!

--
Jorge

Responder a