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:
Using perl Syntax Highlighting
#!/usr/bin/perl -w
use IO::Socket;
$sock = IO::Socket::INET->new(PeerAddr => "192.168.1.103",PeerPort => 2101, Proto => 'tcp', Timeout => 1,);
die "problema" unless $sock;
print "Dato a enviar: \n";
$msg = <STDIN>;
print $sock $msg;
read $sock, $line, 1;
print $line;
close $sock;
Coloreado en 0.003 segundos, usando
GeSHi 1.0.8.4
El código servidor cuando el dispositivo hace de cliente, el cual me tira los puntos
Using perl Syntax Highlighting
#!/usr/bin/perl -w
use IO::Socket;
my $server = IO::Socket::INET->new(
Proto => 'tcp',
LocalPort => 5800,
Listen => 1,
Reuse => 1,
);
die "No puedo configurar el servidor" unless $server;
$|++;
while( $client = $server->accept() ) {
$client->autoflush(1);
print "Cliente conectado ";
my $msg="a";
print $client $msg;
read $client, $line, 7;
print $line;
close $client;
}
Coloreado en 0.002 segundos, usando
GeSHi 1.0.8.4
La salida de esto es:
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