• Publicidad

Salida socket en Perl

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

Salida socket en Perl

Notapor vasko » 2010-11-22 11:29 @520

Hola.

Tengo un dispositivo serial/ethernet conectado a un router el cual le asigna una IP al dispositivo.

El dispositivo lo único que hace es recibir un dato y devolverlo por medio de un socket.

Cuando configuro el dispositivo como servidor y hago un código cliente que envíe los datos, toda anda bien, es decir me devuelve los datos que envío.

El problema es cuando configuro el dispositivo como cliente. Éste recibe el dato y lo devuelve con 4 o 5 puntos, después un salto de linea y finalmente el dato que le envié.

El código del caso que funciona bien es:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl -w
  2. use IO::Socket;
  3. $sock = IO::Socket::INET->new(PeerAddr    => "192.168.1.103",PeerPort =>  2101, Proto => 'tcp', Timeout     =>  1,);
  4. die "problema" unless $sock;
  5.  
  6. print "Dato a enviar: \n";
  7. $msg = <STDIN>;
  8. print $sock $msg;
  9. read $sock, $line, 1;
  10. print $line;
  11. close $sock;
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


El código servidor cuando el dispositivo hace de cliente, el cual me tira los puntos
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl -w
  2. use IO::Socket;
  3.  
  4. my $server = IO::Socket::INET->new(
  5.     Proto       => 'tcp',
  6.     LocalPort   =>  5800,
  7.     Listen      =>  1,
  8.     Reuse       =>  1,
  9. );
  10.  
  11. die "No puedo configurar el servidor" unless $server;
  12.  
  13. $|++;
  14.  
  15. while( $client = $server->accept() ) {
  16.     $client->autoflush(1);
  17.  
  18.     print "Cliente conectado ";
  19.     my $msg="a";
  20.     print $client $msg;
  21.     read $client, $line, 7;
  22.         print $line;
  23.  
  24.     close $client;
  25. }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


La salida de esto es:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
Cliente conectado .....
Cliente conectado ....
aCliente conectado ....
aCliente conectado ....
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Es decir, cuando hay punto tira el valor que le envié, cuando hay cinco puntos, no.

¿Los puntos de dónde saldrán? ¿Basura del dispositivo? ¿Por qué en el caso que funciona bien no aparecen esos puntos?

Muchas gracias de antemano por la ayuda
vasko
Perlero nuevo
Perlero nuevo
 
Mensajes: 4
Registrado: 2010-08-26 18:04 @794

Publicidad

Re: Salida socket en Perl

Notapor explorer » 2010-11-22 11:40 @528

Esto sí que es raro...

Yo lo que haría sería sacar los valores hexadecimales de los caracteres que me devuelve el cliente.

Con las funciones pack/unpack lo puedes hacer, o incluso con un bucle y la función ord() puedes obtener el valor decimal de cada carácter. Lo único que tienes que hacer es un bucle por cada carácter de $line.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: Google [Bot] y 1 invitado

cron