Como especifiqué en un post anterior, soy un principiante en Perl, así que recurro a ustedes porque me surge una duda acerca de los sockets. Tengo los dos siguientes archivos:
server.pl
Using perl Syntax Highlighting
- #!/usr/bin/perl
- use IO::Socket;
- use Net::hostent;
- $servidor = IO::Socket::INET->new
- (
- Proto => 'tcp',
- LocalPort => '1717',
- Listen => 5,
- Reuse => 1
- );
- die "No se pudo iniciar el servidor." unless $servidor;
- print "[Servidor \"",$0,"\" a la espera de clientes.]\n";
- while($cliente = $servidor->accept())
- {
- $cliente->autoflush(1);
- print $cliente "Bienvenido a mi servidor.\n";
- $hostinfo = gethostbyaddr($cliente->peeraddr);
- printf "[Conectado con %s]\n", $hostinfo->name;
- print $cliente "¿Algo que decir?";
- close $cliente;
- }
- close $servidor || die "close: $!";
Coloreado en 0.005 segundos, usando GeSHi 1.0.8.4
cliente.pl
Using perl Syntax Highlighting
- #!/usr/bin/perl -w
- use Socket;
- my ($remote,$port, $iaddr, $paddr, $proto, $line);
- $remote = 'localhost';
- $puerto = 1717;
- if ($puerto =~ /\D/)
- {
- $puerto = getservbyname($puerto, 'tcp');
- }
- die "No se especificó un puerto." unless $puerto;
- $iaddr = inet_aton($remote) || die "No Host: $remote";
- $paddr = sockaddr_in($puerto, $iaddr);
- $proto = getprotobyname('tcp');
- socket(SOCK, PF_INET, SOCK_STREAM, $proto) || die "socket: $!";
- connect(SOCK, $paddr) || die "connect: $!";
- while (defined($line = <SOCK>))
- {
- print $line;
- }
- close (SOCK) || die "close: $!";
- exit;
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
Al ejecutar el servidor, me sale el siguiente texto en consola:
[Servidor "server.pl" a la espera de clientes.]
Cuando ejecuto el cliente (con el servidor abierto, obvio), me sale el siguiente texto en la consola del cliente:
Bienvenido a mi servidor.
¿Algo que decir?
Y en el servidor sale lo siguiente:
[Servidor "server.pl" a la espera de clientes.]
[Conectado con localhost.localdomain]
Ahora, mis dudas son:
1- ¿Porqué el servidor sigue abierto, y el cliente se cierra?
2- ¿Cómo hago para enviar instrucciones desde el cliente al servidor?
Espero me puedan ayudar
Saludos ^^