Foros del Web » Programando para Internet » PHP »

Crear un socket server local en php

Estas en el tema de Crear un socket server local en php en el foro de PHP en Foros del Web. Hola amigos! He estado googleando por varios días y no he encontrado lo que estoy buscando, un tutorial donde explique lo más básico para crear ...
  #1 (permalink)  
Antiguo 19/04/2011, 01:13
 
Fecha de Ingreso: octubre-2010
Mensajes: 8
Antigüedad: 14 años
Puntos: 5
Crear un socket server local en php

Hola amigos!

He estado googleando por varios días y no he encontrado lo que estoy buscando, un tutorial donde explique lo más básico para crear tu propio socket server en php en windows.

Lo que me gustaría aprender es:

- Que software es recomendable (wamp, easyphp, etc)

- (Servidor) Un script básico de como abrir y establecer el socket

- (Cliente) Un script simple para probar si funciona la conexión cliente/servidor

Saben de algun tutorial que me puedan recomendar?

De antemano muchas gracias.

Saludos.
  #2 (permalink)  
Antiguo 19/04/2011, 04:04
 
Fecha de Ingreso: abril-2011
Mensajes: 3
Antigüedad: 13 años, 6 meses
Puntos: 0
Respuesta: Crear un socket server local en php

Estoy actualmente trabajando en ello. Cuando lo tenga resuelto contacto contigo. Un saludo.
  #3 (permalink)  
Antiguo 19/04/2011, 08:09
Avatar de Carlojas  
Fecha de Ingreso: junio-2007
Ubicación: Shikasta
Mensajes: 1.272
Antigüedad: 17 años, 5 meses
Puntos: 49
Respuesta: Crear un socket server local en php

Que tal px87, ya consultaste el manual de PHP y las funciones para trabajar con Sockets?. Siempre es bueno consultar la fuente principal en este caso el manual de PHP, ya despues buscas mas ejemplos de lo que necesitas por ejemplo este: Programando Sockets con PHP, y por ultimo cuando tengas mas conocimiento al respecto sacas tus propias conclusiones y adaptas los scripts a tus necesidades.



Saludos.
__________________
"SELECT * FROM Mujeres WHERE situacion NOT IN ('CASADAS','CON HIJOS','ATORMENTADAS','CUASI-ENNOVIADAS') AND personalidad <> 'INTENSA'"
  #4 (permalink)  
Antiguo 19/04/2011, 10:32
 
Fecha de Ingreso: octubre-2010
Mensajes: 8
Antigüedad: 14 años
Puntos: 5
Respuesta: Crear un socket server local en php

Hola Gustavo y Carlojas, antes q nada gracias por la respuestas.

Carlojas, ya estuve leyendo mucho de sockets, ya leí la referencia de sockets en el manual de PHP (por cierto, muy bien explicado). Lo q quiero es solo saber si mi servidor funciona con los script q pido, ya despues iré haciendo mis pruebas. Te agradezco tus consejos y el ejemplo q me dejas.

Gustavo: Contactame, y tal vez los 2 podemos hacer el server.

Saludos.
  #5 (permalink)  
Antiguo 23/04/2011, 01:00
 
Fecha de Ingreso: octubre-2010
Mensajes: 8
Antigüedad: 14 años
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
  #6 (permalink)  
Antiguo 26/08/2011, 16:06
Avatar de syslock64  
Fecha de Ingreso: septiembre-2009
Mensajes: 19
Antigüedad: 15 años, 1 mes
Puntos: 1
Respuesta: Crear un socket server local en php

Waooo!!! este tutorial de px87 esta genial, acabo de digitarlo todo igualito (pa que se quede grabado en mi cabeza) y si funciona, muchas gracias px87 me sirvio, mucho entender... ahora keda para investigar mas a fondo:

Código HTML:
Ver original
  1. recibir una trama accouting de Radius desde un server GGSN
  2. Calling-Station-Id
  3. Framed-Protocol
  4. Called-Station-id
  5. 3GPP-IMSI
  6. 3GPP-user-Location-Info
  7.  
  8. Y grabarlos en una base de datos de para su posterior recuperación, en caso de duplicarse en Calling-Station-Id
  9. Se actualizará el resto de datos.

esto es lo k me enviaron y ya di mi primer paso =) px87 sabes como capturar las tramas cuando hay valores establecidos en lo k escucha el socket? =) espero mi pregunta sea entendible, nunca habia tocado este tema solo escuchado =)
  #7 (permalink)  
Antiguo 28/08/2011, 10:42
Avatar de syslock64  
Fecha de Ingreso: septiembre-2009
Mensajes: 19
Antigüedad: 15 años, 1 mes
Puntos: 1
Información Respuesta: Crear un socket server local en php

Holas, tengo un archivo CAP que es un archivo donde se ha guardado por un tiempo lo que recibia el cliente del servidor GGSN desde un socket, pues ya logre conectarme al socket (localhost y cmd como explica px87) y chevre pero como hago para emular este archivo CAP o como hago para extraer solo cierta informacion de lo que envia el socket por ejem:

Este socket envia el numero del abonado o numero celular de un usuario que visita una pagina, tbn envia la hora, la pagina a donde entro y etc... ya me mandaron k los datos que tengo k recuperar son los siguientes:

Calling-Station-Id
Framed-Protocol
Called-Station-id (por ejem aki estaria el numero "993660112")
3GPP-IMSI
3GPP-user-Location-Info

como hago para extraerlos? k funcion es? estoy 1 dia leyendo pero no encuentro mucha informacion, gracias espero poder contar con una respuesta o link =) saludos
  #8 (permalink)  
Antiguo 29/08/2011, 02:00
 
Fecha de Ingreso: octubre-2010
Mensajes: 8
Antigüedad: 14 años
Puntos: 5
Respuesta: Crear un socket server local en php

Dame tiempo para hacer un pequeño ejemplo, ya que no recuerdo muy bien algunas cosas.

Saludos.
  #9 (permalink)  
Antiguo 23/02/2012, 12:37
Avatar de pyplay  
Fecha de Ingreso: noviembre-2008
Mensajes: 44
Antigüedad: 16 años
Puntos: 0
Respuesta: Crear un socket server local en php

Que interesante esta este post, se podria usar este Servidor Socket en PHP para hacer una sla de chat o juego multijugador ?

Etiquetas: local, server, socket
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 4 personas




La zona horaria es GMT -6. Ahora son las 14:31.