Foros del Web » Programando para Internet » PHP »

socket php

Estas en el tema de socket php en el foro de PHP en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 15/01/2014, 02:28
 
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); 
  #2 (permalink)  
Antiguo 15/01/2014, 06:02
 
Fecha de Ingreso: enero-2014
Mensajes: 6
Antigüedad: 10 años, 3 meses
Puntos: 0
Respuesta: socket php

Tambien tengo este otro enfoque pero me choco contra el mismo problema, es que necesito conectar una pistola de lector de codigo de barras con windows CE con mysql y php es el lenguaje que se, si sabeis de otro lenguaje que no sea muy dificil u otra forma, si me la indicais os lo agradeceria mucho


Código PHP:
error_reporting(~E_ALL);
set_time_limit (0);
 
$address "172.16.10.75";
$port 4545;
$max_clients 10;

function 
baja ($ubicacion){
    
    
    return 
$ubicacion;
    
}

function 
socket_read_normal($socket$end=array("\n""\r")){
    if(
is_array($end)){
        foreach(
$end as $k=>$v){
            
$end[$k]=$v{0};
        }
        
$string='';
        while(
TRUE){
            
$char=socket_read($socket,1);
            
$string.=$char;
            foreach(
$end as $k=>$v){
                if(
$char==$v){
                    return 
$string;
                }
            }
        }
    }else{
        
$endr=str_split($end);
        
$try=count($endr);
        
$string='';
        while(
TRUE){
            
$ver=0;
            foreach(
$endr as $k=>$v){
                
$char=socket_read($socket,1);
                
$string.=$char;
                if(
$char==$v){
                    
$ver++;
                }else{
                    break;
                }
                if(
$ver==$try){
                    return 
$string;
                }
            }
        }
    }
}
 
if(!(
$sock socket_create(AF_INETSOCK_STREAM0)))
{
    
$errorcode socket_last_error();
    
$errormsg socket_strerror($errorcode);
     
    die(
"Couldn't create socket: [$errorcode] $errormsg \n");
}
 
echo 
"Socket created \n";
 
// Bind the source address
if( !socket_bind($sock$address $port) )
{
    
$errorcode socket_last_error();
    
$errormsg socket_strerror($errorcode);
     
    die(
"Could not bind socket : [$errorcode] $errormsg \n");
}
 
echo 
"Socket bind OK \n";
 
if(!
socket_listen ($sock 10))
{
    
$errorcode socket_last_error();
    
$errormsg socket_strerror($errorcode);
     
    die(
"Could not listen on socket : [$errorcode] $errormsg \n");
}
 
echo 
"Socket esta en modo escucha \n";
 
echo 
"Esperando nuevas conexiones entrantes... \n";
 
//array of client sockets
$client_socks = array();
 
//array of sockets to read
$read = array();
  
$y=0;
//start loop to listen for incoming connections and process existing connections
while (true
{
    
//prepare array of readable client sockets
    
$read = array();
     
    
//first socket is the master socket
    
$read[0] = $sock;
     
    
//now add the existing client sockets
    
for ($i 0$i $max_clients$i++)
    {
        if(
$client_socks[$i] != null)
        {
            
$read[$i+1] = $client_socks[$i];
            
        }
    }
     
    
//now call select - blocking call
    
if(socket_select($read $write $except null) === false)
    {
        
$errorcode socket_last_error();
        
$errormsg socket_strerror($errorcode);
     
        die(
"Could not listen on socket : [$errorcode] $errormsg \n");
    }
     
    
//if ready contains the master socket, then a new connection has come in
    
if (in_array($sock$read)) 
    {
        for (
$i 0$i $max_clients$i++)
        {
            if (
$client_socks[$i] == null
            {
                
$client_socks[$i] = socket_accept($sock);
                 
                
//display information about the client who is connected
                
if(socket_getpeername($client_socks[$i], $address$port))
                {
                    echo 
"Client $address : $port esta conectado. \n";
                }
                 
                
//Send Welcome message to client
               
$msg "Bienvenido cliente {$key[0]} \n\r";
         
$msg .= "1.-Crear Paleta\n\r";
         
$msg .= "2.-Ubicar Paleta\n\r";
         
$msg .= "exz.-Salir\n\r";
                
socket_write($client_socks[$i] , $msg);
                
                break;
            }
        }
    }

    
//check each client if they send any data
    
for ($i 0$i $max_clients$i++)
    {
        
        if (
in_array($client_socks[$i] , $read))
        {
                    
                   
            if (
false === ($input socket_read_normal($client_socks[$i]))) {
            echo 
"socket_read() failed: reason: " socket_strerror(socket_last_error($msgsock)) . "\n";
            break 
2;
        }
             
           
            echo 
"el cliente $i dice : ";
            echo 
"$input";
             
            
//send response to client
            
socket_write ($client_socks[$i], "cliente $i dice: ");
            
socket_write ($client_socks[$i], $input);
            
            
socket_write ($client_socks[$i], "\r");
            
$y++;
        }
    }


Etiquetas: select, socket, usuarios, variable
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




La zona horaria es GMT -6. Ahora son las 09:52.