Skip to content

Instantly share code, notes, and snippets.

@masterT
Created October 21, 2015 23:57
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save masterT/bb9da637cf5353673383 to your computer and use it in GitHub Desktop.
Save masterT/bb9da637cf5353673383 to your computer and use it in GitHub Desktop.
Lab 5
#! /usr/bin/env perl
use Getopt::Long;
my $var1=0;
my $var2;
my $var3;
my $var4;
my $options = GetOptions (
"bool" => \$var1,
"h=s" => \$var3,
"2=i" => \$var2,
"g=s" => \$var4 );
print "var1 = $var1\n";
print "var2 = $var2\n";
print "var3 = $var3\n";
print "var4 = $var4\n";
# Explication
#
# Dans GetOptions, on met "2=i" pour signifier que le paramètre
# après « -2 » doit être un nombre entier et on met "h=s" pour
# signifier que le paramètre après « -h » doit être une chaîne de
# caractères (string). Lorsqu'on laisse l'option seul comme pour
# "bool", celui-ci ne prend pas de paramètre et lorsqu'on
# l'inscrit lors de l'appel du programme, il devient à 1 (valeur
# booléenne), sinon il ne change pas. Vous remarquerez qu'on peut
# mettre seulement la première lettre du paramètre « bool ».
# Ainsi, il est très important que tous les paramètres aient une
# lettre de départ différente. Il serait possible d'inscrire le
# nom du paramètre au complet : « Perl ex1.pl -bool -2 777 -h
# allo -g bonjour ».
#! /usr/bin/env perl
use IO::Socket;
# Déclaration des variables
my $protocole = "tcp";
my $port = "3434";
my $input = "";
my $i = 0;
$serveur = IO::Socket::INET->new(
Proto => $protocole,
LocalPort => $port,
Listen => SOMAXCONN,
Reuse => 1
) or die "Impossible de se connecter sur le port $port en localhost";
while (my $connection = $serveur->accept()) {
#Affichage du nombre de connection au serveur
$i++;
print "Connection $i au serveur\n";
#On envoie un mot de bienvenue à l'ordinateur distant
print $connection "Bienvenue mon ami\n";
#On intercepte l'information envoyé par l'ordinateur
#distant, tant que celui-ci n'entre pas la chaine de
#caractère quit suivie de la toucher entrée
while($input ne "quit\r\n") {
#On attend que l'ordinateur distant nous envoie
#des caractères
$input = <$connection>;
#Affichage de la chaine dans la console du serveur
print "$input";
#Le serveur envoie une chaine de caractère à
#l'ordinateur distant
print $connection "Merci pour cette chaine\n";
}
#On réinitialise la variable input
$input = "";
#On ferme la connection
close($connection);
}
#! /usr/bin/env perl
use IO::Socket;
my $input = "";
my $ligne = "";
my $proto = "tcp";
my $host = "localhost";
my $port = 3434;
#Création de la connection avec un ordinateur ayant l'adresse
#localhost pour l'envoie de paquets TCP sur le port 3434
my $connection = IO::Socket::INET->new(
Proto => $proto,
PeerAddr => $host,
PeerPort => $port
) or die "Impossible de se connecter sur le port $port à l'adresse $host";
#Tant que l'utilisateur n'écris pas quit, on continue
while ($ligne ne "quit\n") {
#On attend que le serveur nous envoie une confirmation
$input = <$connection>;
#Affichage du message du serveur dans la console
#de l'utilisateur
print $input;
#On attend que l'utilisateur entre une chaine
$ligne = <STDIN>;
#On envoie la chaine au serveur
#Attention : Il faut prendre en considération l'effet telnet sur le \n
#Ainsi, on s'assure que notre serveur créé à l'exercice 4
#fonctionne autant avec telnet qu'avec ce programme.
if ($ligne eq "quit\n") {
print $connection "quit\r\n";
} else {
print $connection $ligne;
}
}
#Affichage de la dernière chaine envoyé par le serveur
print <$connection>;
#Fermeture de la connection
close ($connection);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment