OVH Cloud OVH Cloud

[HS]Serveur en Perl

2 réponses
Avatar
Maladrie Julien
Salut,


Je sais que ce thread est un peu hors-sujet, mais vu que je ne trouve pas d=
e=20
solution =E0 mon probl=E8me je me suis d=E9cid=E9 =E0 poster i=E7i.=20
Je voudrais r=E9aliser un serveur en perl qui accepte plusieurs connexion=20
simultan=E9es et qui traiteraient les requetes par ordre d'arriv=E9e. J'ai=
=20
commenc=E9 =E0 utiliser Net::Server::PreFork; mais sans r=E9el succ=E8s.

Merci de votre aide
=2D-=20
Julien,

http://maladrie.homelinux.org

"If you want to travel around the world and be invited to speak |
at a lot of different places, just write a Unix operating system."=20

(By Linus Torvalds)

2 réponses

Avatar
datacorp
*

#!/usr/bin/perl -w
# serveur.pl #
###############
use IO::Socket;

$server = IO::Socket::INET->new(
LocalPort => 1234,
Type => SOCK_STREAM,
Reuse => 1,
Listen => 5
) or die "Création du serveur impossible.n";
print "Démarrage du serveur ..n";

while ($client = $server->accept()) {
print $client "Le serveur dit 'bonjour' au client !n";

$pid = fork;
die "Je ne peux pas forker !" if ! defined ($pid);

if ($pid ==0) {
# c'est le processus enfant, chargé de l'écoute des clients
#############################################################
while ($ligne = <$client> ) {
print "client> $ligne";

}
} else {
# c'est le père qui pendant ce temps répond au client #
#######################################################
while ($ligne = <>) {
print $client $ligne;
}
}
}


* _Code client commenté_

#!/usr/bin/perl -w
# client.pl #
##############
use IO::Socket;

print "nom ou adresse IP du serveur (localhost par défaut) ";
$adresse = <>; chomp($adresse);
$adresse= "localhost" if $adresse eq "";

$socket = IO::Socket::INET->new(
PeerAddr => $adresse,
Proto => "tcp",
PeerPort => 1234
)
or die "Connexion au serveur impossible.n";

$pid = fork;
die "Je ne peux pas forker !" if ! defined ($pid);

if ($pid ==0) {
# c'est le processus enfant, chargé de l'émission au serveur
#############################################################
while ($ligne = <> ) {
print $socket $ligne;
}
} else {
# c'est le père qui pendant ce temps écoute le serveur
#######################################################
while ($ligne = <$socket>) {
print "serveur> $ligne";
}
}




Maladrie Julien a écrit :

Salut,


Je sais que ce thread est un peu hors-sujet, mais vu que je ne trouve pas de
solution à mon problème je me suis décidé à poster içi.
Je voudrais réaliser un serveur en perl qui accepte plusieurs connexion
simultanées et qui traiteraient les requetes par ordre d'arrivée. J'ai
commencé à utiliser Net::Server::PreFork; mais sans réel succès.

Merci de votre aide






--
Pensez à lire la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench

Pensez à rajouter le mot ``spam'' dans vos champs "From" et "Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
Maladrie Julien
merci,

J'avais essayé ce code, mais le probleme est que le serveur ne traitait l es
données recues du client2 une fois que le client1 etait deconnecté... H ors il
doit recevoir et traiter les données lorsque plusieurs clients sont
simultanéments connectés.


Merci,

Julien


Le Dimanche 29 Mai 2005 21:42, datacorp a écrit :
*

#!/usr/bin/perl -w
# serveur.pl #
###############
use IO::Socket;

$server = IO::Socket::INET->new(
LocalPort => 1234,
Type => SOCK_STREAM,
Reuse => 1,
Listen => 5
) or die "Création du serveur impossible.n";
print "Démarrage du serveur ..n";

while ($client = $server->accept()) {
print $client "Le serveur dit 'bonjour' au client !n";

$pid = fork;
die "Je ne peux pas forker !" if ! defined ($pid);

if ($pid ==0) {
# c'est le processus enfant, chargé de l'écoute des clients
#############################################################
while ($ligne = <$client> ) {
print "client> $ligne";

}
} else {
# c'est le père qui pendant ce temps répond au client #
#######################################################
while ($ligne = <>) {
print $client $ligne;
}
}
}


* _Code client commenté_

#!/usr/bin/perl -w
# client.pl #
##############
use IO::Socket;

print "nom ou adresse IP du serveur (localhost par défaut) ";
$adresse = <>; chomp($adresse);
$adresse= "localhost" if $adresse eq "";

$socket = IO::Socket::INET->new(
PeerAddr => $adresse,
Proto => "tcp",
PeerPort => 1234
)
or die "Connexion au serveur impossible.n";

$pid = fork;
die "Je ne peux pas forker !" if ! defined ($pid);

if ($pid ==0) {
# c'est le processus enfant, chargé de l'émission au serveur
#############################################################
while ($ligne = <> ) {
print $socket $ligne;
}
} else {
# c'est le père qui pendant ce temps écoute le serveur
#######################################################
while ($ligne = <$socket>) {
print "serveur> $ligne";
}
}

Maladrie Julien a écrit :
>Salut,
>
>
>Je sais que ce thread est un peu hors-sujet, mais vu que je ne trouve pas
> de solution à mon problème je me suis décidé à poster içi.
>Je voudrais réaliser un serveur en perl qui accepte plusieurs connexion
>simultanées et qui traiteraient les requetes par ordre d'arrivée. J' ai
>commencé à utiliser Net::Server::PreFork; mais sans réel succès.
>
>Merci de votre aide



--
Julien,

http://maladrie.homelinux.org

"If you want to travel around the world and be invited to speak |
at a lot of different places, just write a Unix operating system."

(By Linus Torvalds)