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::UserAgentper 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
