• Publicidad

Comenzando con los sockets

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Re: Comenzando con los sockets

Notapor explorer » 2011-01-30 10:44 @489


En algunos de ellos -por ejemplo, el último-, hay ejemplos concretos de servidores/clientes que se intercambian comandos.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14482
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Publicidad

Re: Comenzando con los sockets

Notapor Warlox » 2011-01-30 21:18 @929

¡Listo, ya pude!

Sólo tengo una duda: mira el código del cliente:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl -w
  2.  
  3. use 5.010;
  4. use strict;
  5. use warnings;
  6.  
  7. use IO::Socket;
  8.  
  9. my $socket = IO::Socket::INET->new
  10. (
  11.     PeerAddr => '127.0.0.1',
  12.     PeerPort => 1717,
  13.     Proto => 'tcp'
  14. ) or die "Problema al crear la conexión. $!";
  15.  
  16. STDOUT->autoflush(1);
  17. $socket->autoflush(1);
  18.  
  19. while($socket->connected)
  20. {
  21.     my $comando = <STDIN>;
  22.     print $socket $comando;
  23.     print scalar <$socket>;
  24.    
  25.     last if $comando =~ /^salir$/i;
  26. }
  27.  
  28. close($socket) or die ("Error al cerrar socket: $!");
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


¿Cómo puedo hacer para que el cliente se conecte a mi IP real? Ya que si lo ejecuto poniendo mi IP, no me funciona :S
A veces hay que aprender a correr antes de caminar.
Avatar de Usuario
Warlox
Perlero nuevo
Perlero nuevo
 
Mensajes: 12
Registrado: 2011-01-29 04:23 @224
Ubicación: /home/warlox/

Re: Comenzando con los sockets

Notapor explorer » 2011-01-30 21:28 @936

Arranca el servidor y en otra terminal arrancas el comando netstat -anp. Si el servidor ha conseguido unirse al puerto e IP que querías, deberá aparecer en ese listado.

Deberías explicar a qué te refieres con IP real. ¿La IP de tu red local? ¿Tienes una IP pública de Internet? ¿O la tiene el enrutador con el que te conectas a Internet?
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14482
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Comenzando con los sockets

Notapor Warlox » 2011-01-30 22:03 @960

Pues a la IP que siempre he tenido xD (201.201.5.186) :S, Lo pongo en el PeerAddr pero no anda, al ejecutar el cliente me dice que la conexión ha sido rehusada :(
A veces hay que aprender a correr antes de caminar.
Avatar de Usuario
Warlox
Perlero nuevo
Perlero nuevo
 
Mensajes: 12
Registrado: 2011-01-29 04:23 @224
Ubicación: /home/warlox/

Re: Comenzando con los sockets

Notapor explorer » 2011-01-31 05:56 @289

No nos dices si el servidor aparece en el netstat.

Para saber las IP de tu máquina, hay que ejecutar ipconfig (ifconfig en Windows).
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14482
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Comenzando con los sockets

Notapor danimera » 2011-01-31 12:09 @548

explorer escribiste:No nos dices si el servidor aparece en el netstat.

Para saber las IP de tu máquina, hay que ejecutar ipconfig (ifconfig en Windows).


ipconfig se usa en windows para saber la IP de la maquina,, no se sobre ifconfig en windows
100% Telch - Perl Web Programming
Cali PerlMongers: http://cali.pm.org
Avatar de Usuario
danimera
Perlero frecuente
Perlero frecuente
 
Mensajes: 871
Registrado: 2005-06-23 19:02 @834
Ubicación: Colombia

Re: Comenzando con los sockets

Notapor Warlox » 2011-01-31 12:51 @577

explorer escribiste:No nos dices si el servidor aparece en el netstat.

Para saber las IP de tu máquina, hay que ejecutar ipconfig (ifconfig en Windows).


Nada; el servidor no me aparece en netstat :S
A veces hay que aprender a correr antes de caminar.
Avatar de Usuario
Warlox
Perlero nuevo
Perlero nuevo
 
Mensajes: 12
Registrado: 2011-01-29 04:23 @224
Ubicación: /home/warlox/

Re: Comenzando con los sockets

Notapor explorer » 2011-01-31 13:02 @585

El error está en el servidor... si lo arrancas en tu ordenador, ¿no queda esperando?

Puede que el puerto que estés intentando ocupar ya está ocupado por otro proceso.

netstat -anp te dirá qué proceso puede ser.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14482
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Comenzando con los sockets

Notapor Warlox » 2011-01-31 13:21 @598

Pues parece que no es, porque si lo ejecuto normalmente todo va perfecto. Mira, te voy a poner el código del servidor y del cliente, por si te sirve de algo.

server.pl
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl -w
  2.  
  3. use 5.010;
  4. use strict;
  5. use warnings;
  6.  
  7. use IO::Socket;
  8. use Net::hostent;
  9.  
  10. #Creando el servidor
  11. my $servidor = IO::Socket::INET->new
  12. (
  13.     LocalHost => '127.0.0.1',
  14.     Proto => 'tcp',
  15.     LocalPort => 1717,
  16.     Listen => 1,
  17.     Reuse => 1
  18. )or die "No se pudo configurar el servidor. $!";
  19.  
  20. say "[Servidor \"",$0,"\" a la espera de clientes.]";
  21.  
  22. STDOUT->autoflush(1);
  23. $servidor->autoflush(1);
  24.  
  25. while(my $cliente = $servidor->accept())
  26. {
  27.     my $hostinfo = gethostbyaddr($cliente->peeraddr);
  28.     say "[Conexión establecida con ",$hostinfo->name,"]";
  29.    
  30.     while(defined(my $comando = <$cliente>))
  31.     {
  32.         $comando = lc($comando);
  33.         chomp $comando;
  34.        
  35.         given($comando)
  36.         {
  37.             when('salir')
  38.             {
  39.                 say $cliente 'Bye-bye!';
  40.                 say '[Fin de sesión]';
  41.                 last;
  42.             }
  43.            
  44.             when('cd')
  45.             {
  46.                 say $cliente `eject`;
  47.             }
  48.            
  49.             default
  50.             {
  51.                 say $cliente "ERROR DE COMANDO";
  52.             }
  53.         }
  54.     }
  55.    
  56.     close $cliente;
  57.     say "[",$hostinfo->name," se ha desconectado]";
  58. }
  59.  
  60. close $servidor;
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


cliente.pl
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl -w
  2.  
  3. use 5.010;
  4. use strict;
  5. use warnings;
  6.  
  7. use IO::Socket;
  8.  
  9. my $socket = IO::Socket::INET->new
  10. (
  11.     PeerAddr => '127.0.0.1',
  12.     PeerPort => 1717,
  13.     Proto => 'tcp'
  14. ) or die "Problema al crear la conexión. $!";
  15.  
  16. STDOUT->autoflush(1);
  17. $socket->autoflush(1);
  18.  
  19. while($socket->connected)
  20. {
  21.     my $comando = <STDIN>;
  22.     print $socket $comando;
  23.     print scalar <$socket>;
  24.    
  25.     last if $comando =~ /^salir$/i;
  26. }
  27.  
  28. close($socket) or die ("Error al cerrar socket: $!");
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
A veces hay que aprender a correr antes de caminar.
Avatar de Usuario
Warlox
Perlero nuevo
Perlero nuevo
 
Mensajes: 12
Registrado: 2011-01-29 04:23 @224
Ubicación: /home/warlox/

Re: Comenzando con los sockets

Notapor explorer » 2011-01-31 13:55 @621

Dices que si lo ejecutas todo va bien...

¿Y cómo lo ejecutas para que vaya mal?
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14482
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Anterior

Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 2 invitados

cron