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: 20 años, 7 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_INETSOCK_STREAMSOL_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($socket3)){
$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_INETSOCK_STREAMSOL_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($socket2048)){
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