Ver Mensaje Individual
  #5 (permalink)  
Antiguo 23/04/2011, 01:00
px87
 
Fecha de Ingreso: octubre-2010
Mensajes: 8
Antigüedad: 13 años, 6 meses
Puntos: 5
Respuesta: Crear un socket server local en php

Hola de nuevo!!

Les comento que ya pude hacer mi propio servidor de sockets en PHP en windows, tomando un poco de aquí y de alla lo logre.

Les voy a explicar como lo hice:

Ingredientes:

- wampserver 2.0
- PHP 5.2.9-2 (Por defecto no va a venir instalado, pero lo pueden conseguir [URL="http://www.wampserver.com/addons_php.php"]Aquí[/URL])
Les platico que tuve muchos problemas con la versión 5.3.0.
- Apache 2.2.11 (opcional, yo trabaje con esta versión)
- Especial cuidado en esto! deben de tener activa la extensión para sockets de PHP. La pueden activar desde del icono de wampserver: Clic izq. en el icono >> PHP >> Extensiones de PHP >> clic en: php_sockets
O directamente en el archivo php.ini Clic izq. en el icono >> PHP >>php.ini
y buscan esta línea: extension=php_sockets.dll A la cual le quitan el punto y coma que tiene al inicio.

Una vez hecho esto, reinician el wampserver.

Para tener información más completa acerca de su PHP, pueden respaldar el archivo index.php que esta en la carpeta 'www' y crear su propio phpinfo, esto se hace creando un nuevo archivo index.php, pero ahora con esta línea:

Código PHP:
<?php  phpinfo(); ?>
Ahora pueden verificar el estado de su PHP, y buscar si ya tienen activada la extensión para sockets, para esto busquen este apartado y verifiquen que Sockets Support sea 'enabled':



Ahora tenemos que crear nuestro demonio o daemon, este se encargará de escuchar en todo momento nuestras peticiones como clientes y de enviarnos las respuestas del servidor. Yo utilice este sencillo script que está en el apartado de 'socket_accept' en el manual de PHP y en específico en la ayuda para sockets:

Código PHP:
<?php
$socket 
socket_create(AF_INET,SOCK_STREAM,SOL_TCP);
socket_bind($socket,'127.0.0.1',65500);
socket_listen($socket);

echo 
"Esperando conexión\n\n";
$conn false;
switch(@
socket_select($r = array($socket), $w = array($socket), $e = array($socket), 60)) {
    case 
2:
        echo 
"Conexión rechazada!\n\n";
        break;
    case 
1:
        echo 
"Conexión aceptada!\n\n";
        
$conn = @socket_accept($socket);
        break;
    case 
0:
        echo 
"Tiempo de espera excedido!\n\n";
        break;
}
   
   
if (
$conn !== false) {
    
// communicate over $conn
}

 
?>
Lo guardamos en la carpeta 'www' del wampserver.

Ahora algo interesante y crucial para que esto funcione en windows.
En muchos de los ejemplos que estuve viendo aparece una línea un poco extraña (para los que no estamos muy familiarizados con Linux):

Código:
#!/usr/local/bin/php –q
Esta línea en Linux funciona para apuntar hacia la ubicación de nuestra CLI de PHP.

Esto sirve para ejecutar el archivo binario de la CLI y el archivo que lo contenga se inicialice al arrancar nuestro servidor y se mantenga activo en segundo plano (algo así como un servicio).

Pero lo que nosotros necesitamos en windows es crear un proceso que mantenga activo a nuestro demonio o daemon, para esto crearemos un archivo con formato .bat el cual (de preferencia) guardaremos en la carpeta del wampserver (en mi caso c:/wamp), el archivo debe incluir la siguiente línea:

(Lo pueden crear con el bloc de notas)

Código:
c:/wamp/bin/php/php5.2.9-2/php.exe -q c:/wamp/www/socket.php
En donde:

c:/wamp/bin/php/php5.2.9-2/php.exe > Apunta hacia la ruta de nuestra CLI en windows.

c:/wamp/www/socket.php > Apunta a nuestro script PHP que funciona como demonio.

Ahora para ejecutarlo necesitamos acceder a él por medio del línea de comando en windows, presionamos la combinación de teclas 'Windows + R' escribimos cmd y presionamos enter.

Una vez abierta la ventana de línea de comandos, si nuestra instalación del wampserver está en c:/, tecleamos: c:/wamp/run

Y tendrán que ver algo igual a esto:



Ahora bien que si quieren tener un poco más de comodidad para iniciar este proceso, pueden crear un acceso director en el escritorio:

Clic derecho en el escritorio >> Nuevo >> Acceso directo >> pegan esta línea:

Código:
cmd /k c:/wamp/run
Listo!!, con esto ya deberíamos tener nuestro servidor funcionando, ahora solo falta probarlo, creamos un script PHP con el siguiente código:

Código PHP:
<?php
/*
 *http://www.php.net/manual/en/ref.sockets.php
 */

$host "127.0.0.1";

$socket socket_create(AF_INETSOCK_STREAMSOL_TCP);
$puerto 65500;

if (
socket_connect($socket$host$puerto))
{
    echo 
"\nConexion Exitosa, puerto: " $puerto;
}
else
{
    echo 
"\nLa conexion TCP no se pudo realizar, puerto: ".$puerto;
}
socket_close($socket);
?>
Lo pueden llamar conectar.php y lo guardan en la carpeta 'www' del wampserver, finalmente lo ejecutan desde su navegador: http://localhost/conectar.php

y deberían tener algo igual a esto:



Y como postre:

Si quieren que su servidor sea visto por todos los equipos de su red, pueden hacer esto:

Clic izq. en el icono de wampserver >> Apache >> httpd.conf

Hagan un respaldo del archivo antes de hacer esto!!

Busquen la línea:

Código:
ServerName 127.0.0.1:80
Pueden ponerle una almohadilla o gato detrás de línea para comentarla, así: #ServerName 127.0.0.1:80

Ahora agreguen otra línea igual cambiando el 127.0.0.1 por la ip de su computadora, en mi caso:

Código:
ServerName 192.168.1.105:80
Guarden y reinicien el wampserver, ahora solo desde otro equipo de tu red teclea tu ip, ósea: http://192.168.1.105


Espero que sea de su agrado.

Saludos y gracias especiales a Carlojas por sus links que fueron de mucha ayuda.

Última edición por px87; 23/04/2011 a las 02:40