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