Ver Mensaje Individual
  #1 (permalink)  
Antiguo 09/09/2004, 05:32
E*M*P*I*C*A*L
 
Fecha de Ingreso: agosto-2004
Mensajes: 36
Antigüedad: 22 años, 3 meses
Puntos: 0
programación socket en php

Hola, me dirijo a vosotros por que me encontré con un problema que por más vueltas que le doy no encuentro la solución. Programe un script en php que hace de servidor y otro que hace de cliente, son programas simples que realizan una única función. El problema viene cuando intento conectarme con dos clientes al servidor, este echa a uno de los clientes para permitir la conexión al otro. Pensaba que el límite de conexiones se definía con la función socket_listen(), pero quizás interprete mal el funcionamiento de la misma... Estoy atascado aquí y no se como hacer para que me acepte más de una conexión simultaneamente.

server
Código PHP:
#!/usr/bin/php
<?php
/*
Ejemplo 3. Serividor socket en php que acepta conexiones
*/

// ELIMITANDO EL TIEMPO LIMITE DE EJECUCIÓN DE UN SCRIPT (DEFAULT 30s)
set_time_limit(0);

ob_implicit_flush();
// DEFINIENDO VARIABLES
$host = "192.168.0.10";
$puerto = "10001";

// ABRIENDO ARCHIVO DE LOG PARA LA ESCRITURA
$fp = fopen ("error.log", "a");

// CREANDO EL SOCKET: (IP PROTOCOL[IPV4], TYPE SOCKET[TCP], PROTOCOL[TCP])
if (!$socket = @socket_create(AF_INET, SOCK_STREAM, SOL_TCP)){
$log = "Fallo en socket_create:".socket_strerror($socket)."\n";
fwrite ($fp, $log);
print 
"Fallo al iniciar el servidor\n";
exit;}

// ASOCIANDO HOST Y PUERTO AL SOCKET
if (!$bind = @socket_bind($socket, $host, $puerto)){
$log = "Fallo en socket_bind:".socket_strerror($bind)."\n";
fwrite ($fp, $log);
print 
"Fallo al iniciar el servidor\n";
exit;}

// ESCUCHANDO LA CONEXIÓN DEL SOCKET
if (!$bind = @socket_listen($socket, 3)){
$log = "Fallo en socket_listen:".socket_strerror($bind)."\n";
fwrite ($fp, $log);
print 
"Fallo al iniciar el servidor\n";
exit;}

// ACEPTANDO LAS CONEXIONES SOCKET
while (TRUE) {
if (!
$accept = @socket_accept($socket)){
$log = "Fallo en socket_accept:".socket_strerror($accept)."\n";
fwrite ($fp, $log);
print 
"Fallo al aceptar conexiones\n";}

// MENSAJE DE ESTABLECIMIENTO DE CONEXIÓN
$buffer = "\nConexión realizada\n";

// ESCRIBIMOS EN EL SOCKET EL MENSAJE DE ESTABLECIMIENTO DE CONEXIÓN
if (!@socket_write($accept, $buffer)){
$log = "Fallo al escribir en socket";
fwrite ($fp, $log);}
}
?>
cliente
Código PHP:
#!/usr/bin/php
<?php
/*
Ejemplo 2, conexión via socket
*/

// DEFINICIÓN DE VARIABLES
$puerto = 10001;
$host = "192.168.0.10";

// CREANDO EL SOCKET: (IP PROTOCOL[IPV4], TYPE SOCKET[TCP], PROTOCOL[TCP])
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
$conexion = socket_connect($socket, $host, $puerto);

// DEFINICIÓN DE VARIABLES
$buffer = "helo $host\r\n";
$salida = ' ';

// ESCRIBIENDO EL BUFFER EN EL SOCKET
socket_write($socket, $buffer);

// LEYENDO RESPUESTA DEL SOCKET
print "leyendo...\n";
while (
$salida = socket_read($socket, 2048)){
echo 
$salida;}

// CERRANDO LA CONEXIÓN
socket_close($socket);
?>
__________________
Como aquel que calla otorga y aunque la ignorancia es sorda pude levantar la voz, más fuerte que los ladridos de los perros consentidos y que la voz del pastor.

Última edición por E*M*P*I*C*A*L; 09/09/2004 a las 05:34