Introducció
En aquest tema, explorarem com utilitzar Perl per a la programació de xarxes. Perl és una eina poderosa per a la manipulació de xarxes gràcies als seus mòduls integrats i la seva capacitat per gestionar tasques de xarxa de manera eficient. Aprendrem a crear clients i servidors, a treballar amb sockets i a utilitzar mòduls com Net::HTTP
i LWP::UserAgent
.
Conceptes Clau
- Sockets: Un socket és un punt final per a la comunicació entre dues màquines.
- Clients i Servidors: En la programació de xarxes, un client sol·licita serveis i un servidor proporciona aquests serveis.
- Protocols: Els protocols com HTTP, FTP, i TCP/IP defineixen les regles per a la comunicació de xarxa.
Sockets en Perl
Creació d'un Client TCP
Un client TCP es connecta a un servidor i envia o rep dades. A continuació, es mostra un exemple bàsic de client TCP en Perl:
use strict; use warnings; use IO::Socket::INET; # Creació del socket del client my $socket = new IO::Socket::INET ( PeerHost => '127.0.0.1', PeerPort => '5000', Proto => 'tcp', ) or die "No s'ha pogut connectar al servidor: $!\n"; print "Connectat al servidor\n"; # Enviar dades al servidor my $data = "Hola, servidor!"; $socket->send($data); # Rebre resposta del servidor my $response = ""; $socket->recv($response, 1024); print "Resposta del servidor: $response\n"; # Tancar el socket $socket->close();
Creació d'un Servidor TCP
Un servidor TCP escolta les connexions entrants i respon als clients. Aquí teniu un exemple bàsic de servidor TCP en Perl:
use strict; use warnings; use IO::Socket::INET; # Creació del socket del servidor my $socket = new IO::Socket::INET ( LocalHost => '127.0.0.1', LocalPort => '5000', Proto => 'tcp', Listen => 5, Reuse => 1, ) or die "No s'ha pogut crear el socket: $!\n"; print "Servidor esperant connexions a la porta 5000\n"; while (1) { # Acceptar connexió del client my $client_socket = $socket->accept(); # Rebre dades del client my $data = ""; $client_socket->recv($data, 1024); print "Dades rebudes: $data\n"; # Enviar resposta al client my $response = "Hola, client!"; $client_socket->send($response); # Tancar el socket del client $client_socket->close(); } # Tancar el socket del servidor $socket->close();
Utilització de Mòduls de Xarxa
Net::HTTP
El mòdul Net::HTTP
permet fer sol·licituds HTTP. Aquí teniu un exemple de com fer una sol·licitud GET:
use strict; use warnings; use Net::HTTP; my $s = Net::HTTP->new(Host => "www.example.com") || die $@; $s->write_request(GET => "/", 'User-Agent' => "Mozilla/5.0"); my ($code, $mess, %h) = $s->read_response_headers; print "Codi de resposta: $code\n"; while (1) { my $buf; my $n = $s->read_entity_body($buf, 1024); die "Error de lectura: $!\n" unless defined $n; last unless $n; print $buf; }
LWP::UserAgent
El mòdul LWP::UserAgent
és una eina més avançada per fer sol·licituds HTTP. Aquí teniu un exemple de com fer una sol·licitud GET i processar la resposta:
use strict; use warnings; use LWP::UserAgent; my $ua = LWP::UserAgent->new; my $response = $ua->get('http://www.example.com'); if ($response->is_success) { print $response->decoded_content; } else { die $response->status_line; }
Exercicis Pràctics
Exercici 1: Client i Servidor TCP
- Objectiu: Crear un client i un servidor TCP que intercanviïn missatges.
- Instruccions:
- Modifiqueu els exemples de client i servidor TCP anteriors per enviar i rebre missatges personalitzats.
- El client ha d'enviar un missatge al servidor, i el servidor ha de respondre amb un missatge diferent.
Exercici 2: Sol·licitud HTTP amb LWP::UserAgent
- Objectiu: Fer una sol·licitud GET a una pàgina web i processar la resposta.
- Instruccions:
- Utilitzeu el mòdul
LWP::UserAgent
per fer una sol·licitud GET a una pàgina web de la vostra elecció. - Imprimiu el contingut de la resposta a la consola.
- Utilitzeu el mòdul
Solucions
Solució a l'Exercici 1
Client TCP:
use strict; use warnings; use IO::Socket::INET; my $socket = new IO::Socket::INET ( PeerHost => '127.0.0.1', PeerPort => '5000', Proto => 'tcp', ) or die "No s'ha pogut connectar al servidor: $!\n"; print "Connectat al servidor\n"; my $data = "Hola, servidor!"; $socket->send($data); my $response = ""; $socket->recv($response, 1024); print "Resposta del servidor: $response\n"; $socket->close();
Servidor TCP:
use strict; use warnings; use IO::Socket::INET; my $socket = new IO::Socket::INET ( LocalHost => '127.0.0.1', LocalPort => '5000', Proto => 'tcp', Listen => 5, Reuse => 1, ) or die "No s'ha pogut crear el socket: $!\n"; print "Servidor esperant connexions a la porta 5000\n"; while (1) { my $client_socket = $socket->accept(); my $data = ""; $client_socket->recv($data, 1024); print "Dades rebudes: $data\n"; my $response = "Hola, client!"; $client_socket->send($response); $client_socket->close(); } $socket->close();
Solució a l'Exercici 2
use strict; use warnings; use LWP::UserAgent; my $ua = LWP::UserAgent->new; my $response = $ua->get('http://www.example.com'); if ($response->is_success) { print $response->decoded_content; } else { die $response->status_line; }
Conclusió
En aquest tema, hem après els conceptes bàsics de la programació de xarxes amb Perl, incloent la creació de clients i servidors TCP, i l'ús de mòduls com Net::HTTP
i LWP::UserAgent
per fer sol·licituds HTTP. Amb aquests coneixements, esteu preparats per començar a desenvolupar aplicacions de xarxa més complexes amb Perl.
Curs de Programació en Perl
Mòdul 1: Introducció al Perl
Mòdul 2: Programació Bàsica en Perl
Mòdul 3: Treballant amb Dades
Mòdul 4: Programació Intermèdia en Perl
Mòdul 5: Programació Avançada en Perl
- Expressions Regulars Avançades
- Interacció amb Bases de Dades amb DBI
- Programació Web amb Perl
- Multifil