Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 
Índice general » Mundo Perl » Básico » Problemas con IO::Socket::INET  RESUELTO Responder al tema
Nuevo tema


Página 1 de 1  [ 8 mensajes ] 
 
Nota Jue Jul 29, 2010 6:41 pm

Perlero Nuevo
Registrado: Jue Jul 29, 2010 6:30 pm
Mensajes: 4
Problemas con IO::Socket::INET  RESUELTO
Buenas,

Estoy haciendo una migración de un aplicación de un servidor a otro, y estoy teniendo un problema con un script en Perl.

Os muestro el código (aunque creo que no es relevante):

Syntax: [ Download ] [ Hide ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2.  
  3. use IO::Socket::INET;
  4. use CGI qw (-oldstyle_urls :standard);
  5.  
  6. my $query = new CGI;
  7. my @names = $query->param;
  8. print header('text/html');
  9. $url_query = query_string;
  10. my $rhost = $query->remote_addr();
  11.  
  12.  
  13. $http = IO::Socket::INET->new(
  14.     PeerAddr => "localhost:80",
  15.     Proto => "tcp"
  16. );
  17.  
  18. my $url = "/CGI/InterCGI.jsp" . "?" . $url_query . "&ipaccess=$rhost";
  19. $http->print("GET /$url HTTP/1.0\n\n");
  20. my @lineas = $http->getlines();
  21. my $esta = 0;
  22. foreach $linea (@lineas) {
  23.    if ($esta ==1) {
  24.       print $linea;
  25.    }
  26.    if ($linea=~/Content-Type/) {
  27.      $esta = 1;
  28.    }
  29. }


Cuando ejecuto el archivo me da el siguiente error:

Syntax: [ Download ] [ Hide ]
Using text Syntax Highlighting
Can't locate IO/Socket/INET.pm in @INC (@INC contains: /usr/perl5/5.00503/sun4-solaris /usr/perl5/5.00503 /usr/perl5/site_perl/5.005/sun4-solaris /usr/perl5/site_perl/5.005 .) at ./InterCGI line 3.

BEGIN failed--compilation aborted at ./InterCGI line 3
 


Por lo que he estado leyendo, creo que falla porque no tengo bien instalado el módulo IO::Socket::INET, sin embargo, no sé cómo instalar bien este módulo, ¿de donde lo descargo? ¿cómo lo instalo? El SO es Solaris 8 y la versión del Perl, la 5.

Por favor, si alguien pudiese echarme una mano se lo agradecería.

Gracias y un saludo.


Nota Jue Jul 29, 2010 6:55 pm
Avatar de Usuario
Administrador
Registrado: Dom Jul 24, 2005 6:12 pm
Ubicación: Valladolid, España
Mensajes: 9492
Re: Problemas con IO::Socket::INET
Bienvenido a los foros de Perl en Español, CarlosID.

Efectivamente, CarlosID, el mensaje de error indica que Perl no encuentra ese módulo en ninguno de los directorios por defecto.

Si no lo tienes instalado, debes primero a probar a instalarlo desde el sistema de paquetes de tu Solaris. Mira a ver si aparece como paquete instalable. No se llamará igual que IO::Socket::INET, sino que quizás libio-socket-perl o algo parecido.

Si no lo encuentras, prueba, siendo root, a instalarlo con el comando cpan: cpan IO::Socket::INET

Si no te funciona, entonces debes conectarte a su página: IO::Socket::INET, bueno, más bien a la de la distribución IO. Dentro del fichero README vienen las instrucciones para instalarlo siguiendo tres pasos sencillos.

Comprueba antes el número de versión, en la matriz de sistemas operativos/versiones con tu versión de Perl... que me suena que es del siglo pasado -literalmente-.

_________________
JF^D Perl programming


Nota Jue Jul 29, 2010 8:24 pm

Perlero Nuevo
Registrado: Jue Jul 29, 2010 6:30 pm
Mensajes: 4
Re: Problemas con IO::Socket::INET
Hola explorer, gracias por la rápida respuesta.

He intentado hacer las 3 cosas que me has indicado, pero no he sido capaz:

No he encontrado en los paquetes de mi Solaris nada parecido a libio-socket-perl.

He ejecutado el comando cpan IO::Socket::INET, pero me ha empezado a realizar una serie de preguntas que no sabía contestar, las he pasado todas dando al ENTER, pero al final no ha funcionado.

Por último, me he descargado el paquete. Como bien has dicho mi versión de Perl es del siglo pasado, por lo que he tenido que descargarme la versión IO-1.20. El primer paso me lo ha realizado bien (perl Makefile.PL), pero en el segundo me da el siguiente error:

Syntax: [ Download ] [ Hide ]
Using text Syntax Highlighting
# make test
cc -c   -xO3 -xdepend    -DVERSION=\"1.20\" -DXS_VERSION=\"1.20\" -KPIC -I/usr/perl5/5.00503/sun4-solaris/CORE -DI_POLL  IO.c
make: cc: Command not found
make: *** [IO.o] Error 127
 


Me he instalado el paquete gcc, que es donde creo que viene el comando cc, pero nada.

¿Se te ocurre algo más?

Muchas gracias y un saludo.


Nota Vie Jul 30, 2010 3:03 am
Avatar de Usuario
Perlero Frecuente
Registrado: Jue Ene 03, 2008 3:19 pm
Mensajes: 175
Re: Problemas con IO::Socket::INET
CarlosID escribió:
Estoy haciendo una migración de un aplicación de un servidor a otro, y estoy teniendo un problema con un script en Perl.

Os muestro el código (aunque creo que no es relevante):


¡Ah, si lo es!

Tu problema es que estás usando Perl 5.005_03, una versión de hace más de diez años y algunas cosas han cambiado desde entonces. En concreto, la que creo que a ti te afecta es cómo se estructuran los módulos de la familia IO::Socket.

Prueba a cambiar la línea que dice use IO::Socket::INET; por use IO::Socket;

De todas formas lo que tendrías que hacer es actualizar tu versión de Perl.

En SUN Freeware podrás encontrar paquetes para tu versión de Solaris.


Nota Vie Jul 30, 2010 4:10 am

Perlero Nuevo
Registrado: Jue Jul 29, 2010 6:30 pm
Mensajes: 4
Re: Problemas con IO::Socket::INET
Gracias salva,

He intentado hacer lo que me has comentado, cambiado sólo la línea 3.

Sin embargo ahora me da este error:

Syntax: [ Download ] [ Hide ]
Using text Syntax Highlighting
# ./InterCGI
Content-Type: text/html; charset=ISO-8859-1

Can't call method "print" on an undefined value at ./InterCGI line 19.
 


Parece que ha avanzado un poco, pero no del todo... También he probado a cambiar la línea 13, quitando también "::INET"

Y el error en este caso es:

Syntax: [ Download ] [ Hide ]
Using text Syntax Highlighting
# ./InterCGI
Content-Type: text/html; charset=ISO-8859-1

IO::Socket: Cannot configure a generic socket at ./InterCGI line 13
 


En caso de instalar una nueva versión, ¿me recomiendas alguna en especial?

Muchas gracias y un saludo.


Nota Vie Jul 30, 2010 4:35 am
Avatar de Usuario
Perlero Frecuente
Registrado: Jue Ene 03, 2008 3:19 pm
Mensajes: 175
Re: Problemas con IO::Socket::INET
CarlosID escribió:
Can't call method "print" on an undefined value at ./InterCGI line 19.

Por alguna razón la creación del socket falla, y como no haces comprobación de errores, el problema no salta hasta que tratas de utilizar el objeto en la línea 19.

Lo que tienes que investigar es por qué falla la creación del socket en la línea 13. Asegúrate de que no tienes problemas de conectividad, que el servidor responde, etc.

CarlosID escribió:
Parece que ha avanzado un poco, pero no del todo... También he probado a cambiar la línea 13, quitando también "::INET"

No, eso no lo tienes que hacer. Tu quieres utilizar la clase IO::Socket::INET, lo que pasa es que en esa antigua versión de Perl, esa clase se define dentro del mismo fichero que IO::Socket y por eso te dije que quitases el ::INET de la sentencia use

CarlosID escribió:
En caso de instalar una nueva versión, ¿me recomiendas alguna en especial?

Pues o la estable más reciente disponible para tu OS o la misma que ya estés utilizando para correr tu programa en otro sitio. En cualquier caso, no te recomiendo nada anterior a la 5.8.8.


Nota Vie Jul 30, 2010 5:24 am
Avatar de Usuario
Administrador
Registrado: Dom Jul 24, 2005 6:12 pm
Ubicación: Valladolid, España
Mensajes: 9492
Re: Problemas con IO::Socket::INET
Y... digo yo... ¿no sería más fácil usar el módulo LWP::Simple?

Seguro que ya lo tienes instalado, y con la función get() ya puedes hacer la petición HTTP que estás mostrando en el código.

_________________
JF^D Perl programming


Nota Vie Jul 30, 2010 6:30 am

Perlero Nuevo
Registrado: Jue Jul 29, 2010 6:30 pm
Mensajes: 4
Re: Problemas con IO::Socket::INET
Hola explorer, salva,

Muchas gracias a los dos.

Explorer: no he llegado a probar tu solución, porque salva tenía razón. La máquina en la que estoy probando no tenía acceso a Internet, por eso no podía abrir la conexión. He cambiado "localhost" por la IP local de la máquina con la que me conectaba y ha funcionado.

Muchísimas gracias, muy buen foro este.

Un saludo.


Responder al tema  [ 8 mensajes ] 

Reglas del Foro
No puedes abrir nuevos temas en este Foro
No puedes responder a temas en este Foro
No puedes editar tus mensajes en este Foro
No puedes borrar tus mensajes en este Foro
No puedes enviar adjuntos en este Foro

Publicidad

Socializa

Síguenos por Twitter

Suscríbete GRATUITAMENTE al Boletín de Perl en Español

Saltar a:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Traducción al español por Huan Manwë para phpbb-es.com
phpBB SEO