problema con sockets

18 views
Skip to first unread message

Alonso Manilla

unread,
May 20, 2013, 1:17:30 PM5/20/13
to comuni...@googlegroups.com
Hola, 

necesito hacer una conexión por medio de sockets a un  servidor de mi proveedor.

Probando con un telnet puedo enviar una cadena correctamente y entonces me devuelve otra cadena.

El problema está en que no puedo obtener esa cadena desde php. Cuando ejecuto el script desde un navegador la respuesta que obtengo es: success. pero si agrego un socket_read me dice que hay un error 500 Internal Error

Este es el código que estoy utilizando:

<?php
error_reporting(E_ALL);
 
$service_port = "25000";
 
$address = "128.9.55.102";
 
/* Create a TCP/IP socket. */
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
    echo "socket_create() failed: reason: " . 
         socket_strerror(socket_last_error()) . "\n";
}
 
echo "Attempting to connect to '$address' on port '$service_port'...";
$result = socket_connect($socket, $address, $service_port);
if ($result === false) {
    echo "socket_connect() failed.\nReason: ($result) " . 
          socket_strerror(socket_last_error($socket)) . "\n";
}
 
$out = '';
 
echo "Sending request...";
socket_write($socket, $autenticador, strlen($autenticador));
echo socket_strerror(socket_last_error());
echo "OK.\n";

echo "Reading response:\n\n";

echo stream_get_line($socket, 1024);
// las siguientes líneas dan error
//while ($out = socket_read($socket, 1024)) {
//    echo $out;
//}
echo socket_strerror(socket_last_error($socket));
 
socket_close($socket);
?>


La respuesta que obtengo al ejecutar este código es:

Attempting to connect to '128.9.55.102' on port '25000'...Sending request...SuccessOK. Reading response: Success

Las dudas que tengo son:
  • ¿se puede llamar a sockets desde el navegador o solo funciona desde PHP/CLI?
  • ¿en el segundo parámetro del socket_read que tipo de dato debo pasar? Ya intente con INT y String pero manda el mismo error.
  • ¿Hay alguna otra manera de obtener lo que esta trayendo el socket para guardarlo en una variable o mandarlo a un archivo?
Gracias por su ayuda.

Alonso Manilla

unread,
May 29, 2013, 7:13:08 PM5/29/13
to comuni...@googlegroups.com
Bueno... pues tuve que solucionarlo por medio de linux con 
script -c "telnet 128.9.55.100 25000" archivo.txt 
ahí me guarda todo lo que hago y después ya solo recupero los renglones que necesito.

Por si a alguien le sirve.

Javier López López

unread,
May 29, 2013, 7:14:48 PM5/29/13
to comuni...@googlegroups.com
Hola

Se puede con expresiones regulares desde PHP, aunque en rendimiento creo que es mejor desde C, pero si lo quieres hacer  desde PHP, solo prueba con expresiones regulares.

Saludos
Javier L
Senior PHP Developer


--
--
Has recibido este mensaje porque estás suscrito a
Grupo "ComunidadPHP" de Grupos de Google.
Si quieres publicar en este grupo, envía un mensaje de correo
electrónico a programad...@googlegroups.com
Para anular la suscripción a este grupo, envía un mensaje a
programadoresde...@googlegroups.com
Para obtener más opciones, visita este grupo en
http://groups.google.com/group/programadoresdephp?hl=es.
---
Has recibido este mensaje porque estás suscrito al grupo "ComunidadPHP" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus correos electrónicos, envía un correo electrónico a comunidadphp...@googlegroups.com.
Para obtener más opciones, visita https://groups.google.com/groups/opt_out.
 
 

Javier López López

unread,
May 29, 2013, 7:20:09 PM5/29/13
to comuni...@googlegroups.com
Reply all
Reply to author
Forward
0 new messages