Ver Mensaje Individual
  #3 (permalink)  
Antiguo 04/01/2008, 12:43
ginnk
 
Fecha de Ingreso: enero-2008
Mensajes: 6
Antigüedad: 16 años, 4 meses
Puntos: 0
Re: PHP i los sockets

Hola!

Me refiero a la creacion de un socket i un bucle ke espera conexiones. Es el tipico ejemplo que hay en los tutoriales sobre sockets. Tu lo ejecutas i por telnet por ejemplo puedes acceder al puerto que tienes abierto.

No tiene firewall, he redireccionado los puertos del router, creo ke lo he echo todo.

El codigo, como he dixo es el de un tutorial normal i corriente de internet.

Aqui esta. Por si lo quereis mirar o probar.

gracias!!


#!/usr/bin/php -q
<?php

error_reporting(E_ALL);
set_time_limit(0);
ob_implicit_flush();

$address = 'localhost';
$port = 5222;

function send_Message($allclient, $socket, $buf) {
foreach($allclient as $client) {
socket_write($client, "$socket wrotecaaaaaaaaca: $buf");
}
}

if (($master = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) < 0) {
echo "socket_create() failed, reason: " . socket_strerror($master) . "\n";
}
socket_set_option($master, SOL_SOCKET,SO_REUSEADDR, 1);

if (($ret = socket_bind($master, $address, $port)) < 0) {
echo "socket_bind() failed, reason: " . socket_strerror($ret) . "\n";
}

if (($ret = socket_listen($master, 5)) < 0) {
echo "socket_listen() failed, reason: " . socket_strerror($ret) . "\n";
}

$read_sockets = array($master);

while (true) {
$changed_sockets = $read_sockets;
$num_changed_sockets = socket_select($changed_sockets, $write = NULL, $except = NULL, NULL);

foreach($changed_sockets as $socket) {
if ($socket == $master) {

if (($client = socket_accept($master)) < 0) {
echo "socket_accept() failed: reason: " . socket_strerror($msgsock) . "\n";
continue;
} else {
array_push($read_sockets, $client);
}
} else {

$bytes = socket_recv($socket, $buffer, 2048, 0);
if ($bytes == 0) {
$index = array_search($socket, $read_sockets);
unset($read_sockets[$index]);
socket_close($socket);
}else{
$allclients = $read_sockets;
array_shift($allclients);
send_Message($allclients, $socket, $buffer);
}
}

}
}

?>