• Publicidad

Server socket sin esperar retorno de línea

¿Ya sabes lo que es una referencia? Has progresado, el nível básico es cosa del pasado y ahora estás listo para el siguiente nivel.

Server socket sin esperar retorno de línea

Notapor nereha » 2008-06-21 14:55 @663

Hola chicos, soy nueva por aquí y vengo con el ánimo de si me podéis echar un cable; resulta que para un pequeño proyecto estoy realizando un servidor muy sencillo.
Básicamente tengo que aceptar una conexión entrante y recibir lo que otro dispositivo me envíe. Tengo un código bastante largo, pero en sí voy a pegar la esencia del problema. El servidor funciona correctamente pero solo recibo la cadena que el otro dispositivo me envía si la línea va acabada de la pulsación de INTRO.
La cuestión es que esté continuamente en escucha y si le doy a la letra A, pues que automáticamente reciba la A sin esperar al INTRO.
Creo que debe ser sencillo y concretamente en esta línea: while($_=$psock->getline) pero por más que leo, busco o cambio no consigo hacerlo funcionar.

Espero me puedan echar un cable, desde ya muy agradecida ;)

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl -w
use IO::Socket;
my $sock = IO::Socket::INET->new(Listen => 5,
                                 LocalAddr => '0.0.0.0',
                                 LocalPort => 1111,
                         Proto => 'tcp');
$sock->autoflush(1);

while(1) {
        my $psock = $sock->accept();
        warn "Accept from ",$psock->peerhost,"\n";
        $psock->print("Bienvenido\n");

        while($_=$psock->getline) {

                print $_;
                print $_;
                $psock->print("ok\n");
        }
        warn "Close from ",$psock->peerhost,"\n";
        $psock->close;
}
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4
nereha
Perlero nuevo
Perlero nuevo
 
Mensajes: 3
Registrado: 2008-06-21 14:48 @658

Publicidad

Notapor explorer » 2008-06-21 16:35 @733

Bienvenida a los foros de Perl en Español, nereha.

getline() espera una línea acabada en avance de línea. Debes usar getc() para leer un byte cada vez.

Mira este hilo. Busca por mi primer mensaje. En la segunda parte hay un ejemplo de cómo leer byte a byte.
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 Intermedio

¿Quién está conectado?

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