Foros del Web » Programando para Internet » PHP »

Socket en php. Recibir xml

Estas en el tema de Socket en php. Recibir xml en el foro de PHP en Foros del Web. Hola. Estoy con un proyecto en el que tengo que crear un socket que esté a la escucha de envíos de información de terceros. Concretamente ...
  #1 (permalink)  
Antiguo 20/02/2014, 10:18
 
Fecha de Ingreso: agosto-2003
Mensajes: 324
Antigüedad: 20 años, 8 meses
Puntos: 1
Socket en php. Recibir xml

Hola.
Estoy con un proyecto en el que tengo que crear un socket que esté a la escucha de envíos de información de terceros.
Concretamente se espera que se reciban datos en formato xml.
Una vez trabajados esos datos, tengo que responder con un xml, y su correspondiente header, sobre todo por el status (200, 400, ...).

El php del socket (socket.php):
Código PHP:
<?php
set_time_limit
(0);
$socket=socket_create(AF_INET,SOCK_STREAM,0);
/*0 - acepta cualquier conexion de cualquier ip*/
$direccion=0;
$puerto=4545;
socket_bind($socket$direccion,$puerto);
socket_listen($socket);
 
$tamaño=2048;
while(
1){
    
$cliente=socket_accept($socket);
    
$buffer=socket_read($cliente$tamaño); //leemos mensaje del cliente

    
$ret "POST " $page " HTTP/1.1 400 Bad Request\r\n";
    
$ret .= "Host: " $host "\r\n";
    
$ret .= "Accept-Language: es-ES\r\n";
    
$ret .= "Content-Type: text/xml; charset=UTF-8\r\n";
    
$ret .= "User-Agent: " $_SERVER["HTTP_USER_AGENT"] . "\r\n";
    
$ret .= "Connection: Close\r\n\r\n";

    
$ret .= $buffer;
    
socket_write($cliente$ret); //escribimos el retorno
    
socket_close($cliente); //cerramos cliente
}
//socket_close=>cierra el recurso socket dado por $socket
socket_close($socket);

?>
Archivo de prueba (prueba.php):
Código PHP:
<?php
$host
="172.26.10.21";
$socket=socket_create(AF_INET,SOCK_STREAM,SOL_TCP);
$puerto=4545;
$conexion=socket_connect($socket,$host,$puerto);
$tamaño=2048;
if(
$conexion){
    
$buffer="<?xml version=\"1.0\" encoding=\"iso-8859-1\"?><root>index</root>";
    
$salida='';
    
socket_write($socket,$buffer);
 
    while(
$salida=socket_read($socket,$tamaño)){
        echo 
$salida;
    }
 
    }else{
    echo 
"\n la conexion TCP no se a podido realizar, puerto: ".$puerto;
    }
 
socket_close($socket); //cierra el recurso socket dado por $socket
?>

Si hago una prueba con otro archivo php (prueba.php) "mío" va bien.... pero...
¿A dónde tiene que enviarme el xml la aplicación del tercero?
¿Directamente a mi archivo socket.php o a un archivo "intermedio" php de mi servidor que vuelque los datos a mi socket y luego los retorne?
La aplicación tercera se que está montada en Ruby... no sé más.

Supongo que directamente al socket.php pero aunque me aseguran que me envía un xml, no recibo nada en la variable
Código PHP:
buffer=socket_read($cliente$tamaño); 
¿Algún consejo o ayuda?
Gracias

Etiquetas: recibir, socket, variable, xml
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 19:33.