Tema: socket php
Ver Mensaje Individual
  #1 (permalink)  
Antiguo 15/01/2014, 02:28
pjnoguerol
 
Fecha de Ingreso: enero-2014
Mensajes: 6
Antigüedad: 10 años, 3 meses
Puntos: 0
socket php

Buenas,
Tengo el codigo que dispongo abajo, el cual va perfectamente y lo que hace es que muchos usuarios pueden conectarse por TELNET a php a la vez, simultaneamente, el problema es que yo queria usuarlo para un pequeño SGA(sistema de gestion de almacenes) y que los usuarios pudieran meter varios datos que el sistema le preguntara, por ejemplo, tipo de mercancia, ubicacion de la misma, cantidad, ect...pero el problema que tengo es que solo puedo meter un dato y esto actua como una especie de chat y si pongo mas variables es como si se sobreescriben o no funcionan y no sé si hago algo mal o no se como hacerlo y no se si alguien sabe de socket por el foro o ha hecho algo asi y me podria ayudar

Muchas gracias


Código PHP:
error_reporting(E_ALL);

/* Permitir al script esperar para conexiones. */
set_time_limit(0);

/* Activar el volcado de salida implícito, así veremos lo que estamo obteniendo
 * mientras llega. */
ob_implicit_flush();

$address 'ip';
$port 4545;

if ((
$sock socket_create(AF_INETSOCK_STREAMSOL_TCP)) === false) {
    echo 
"socket_create() falló: razón: " socket_strerror(socket_last_error()) . "\n";
}

if (
socket_bind($sock$address$port) === false) {
    echo 
"socket_bind() falló: razón: " socket_strerror(socket_last_error($sock)) . "\n";
}

if (
socket_listen($sock5) === false) {
    echo 
"socket_listen() falló: razón: " socket_strerror(socket_last_error($sock)) . "\n";
}

//clients array
$clients = array();

do {
    
$read = array();
    
$read[] = $sock;
    
    
$read array_merge($read,$clients);
    
    
// Set up a blocking call to socket_select
    
if(socket_select($read,$write NULL$except NULL$tv_sec 5) < 1)
    {
        
//    SocketServer::debug("Problem blocking socket_select?");
        
continue;
    }
    
    
// Handle new Connections
    
if (in_array($sock$read)) {        
        
        if ((
$msgsock socket_accept($sock)) === false) {
            echo 
"socket_accept() falló: razón: " socket_strerror(socket_last_error($sock)) . "\n";
            break;
        }
        
$clients[] = $msgsock;
        
$key array_keys($clients$msgsock);
        
/* Enviar instrucciones. */
        
$msg "\nBienvenido al Servidor De Prueba de PHP. \n" .
        
"Usted es el cliente numero: {$key[0]}\n" .
        
"Para salir, escriba 'quit'. Para cerrar el servidor escriba 'shutdown'.\n";
        
socket_write($msgsock$msgstrlen($msg));
        
    }
    
    
// Handle Input
    
foreach ($clients as $key => $client) { // for each client        
        
if (in_array($client$read)) {
            if (
false === ($buf socket_read($client2048PHP_NORMAL_READ))) {
                echo 
"socket_read() falló: razón: " socket_strerror(socket_last_error($client)) . "\n";
                break 
2;
            }
            if (!
$buf trim($buf)) {
                continue;
            }
            if (
$buf == 'quit') {
                unset(
$clients[$key]);
                
socket_close($client);
                break;
            }
            if (
$buf == 'shutdown') {
                
socket_close($client);
                break 
2;
            }
            
$talkback "Cliente {$key}: Usted dijo '$buf'.\n";
            
socket_write($client$talkbackstrlen($talkback));
            echo 
"$buf\n";
        }
        
    }        
} while (
true);

socket_close($sock);