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